모듈 가 져 오기 내 보 내기

8867 단어
  • bundle 은 입구 js, 즉 html 가 직접 인용 하 는 js 파일 입 니 다.
  • chunk 는 웹 팩 이 포장 에 의존 하 는 게 으 름 에 따라 js 파일 을 불 러 옵 니 다. 저 희 는 직접 인용 하지 않 습 니 다. 보통 웹 팩 이 자동 으로 불 러 옵 니 다.

  • 도 출
    ES6
  • export
  • //     
    export var Count = 5;
    export function Multiply(a, b) {
      return a * b;
    }
    
    //     
    export default {
      // Some data...
    };
    
    //           
    export * from './src/echarts';
    export { default as IhrMore } from '@/components/common/more/more.vue'

    CommonJS
  • module. exports 호출 자 는 require 를 통 해 모듈 을 호출 할 때 되 돌아 오 는 값 (기본 값 은 새 대상) 입 니 다.
  • module.exports = function (source, map) {
        this.callback(
            null,
            `export default function (Component) {
                Component.options.__docs = ${
                    JSON.stringify(source)
                }
            }`,
            map
        )
    }

    AMD
  • define (비동기 함수 에서 호출 할 수 없 습 니까?)
  • define([name: String], [dependencies: String[]], factoryMethod: function(...))
    define(value: !Function)

    웹 팩 에 내 장 된 LabeledModulesPlugin 플러그 인 특수 내 보 내기 가 져 오기
  • export 표 시 는 함수 성명 이나 변수 성명 전에 나타 날 수 있 습 니 다.함수 명 이나 변수 명 은 값 을 내 보 내 는 식별 자 입 니 다.비동기 적 으로 사용 하면 기대 한 효과 에 이 르 지 못 할 수도 있다.
  • export: var answer = 42;
    export: function method(value) {
      //      ……
    };
  • 현재 역할 영역 에서 의존 하 는 모듈 의 모든 내 보 내기 에 접근 할 수 있 습 니 다.require 탭 은 문자열 앞 에 놓 을 수 있 습 니 다.의존 모듈 은 export 태그 내 보 내기 값 을 사용 해 야 합 니 다.CommonJS 나 AMD 모듈 은 이런 방식 으로 탭 모듈 내 보 내기 로 내 보 낼 수 없습니다.
  • // some-dependency.js  export  
    export: var answer = 42;
    export: function method(value) {
      //       ……
    };
    
    //       require:  
    require: 'some-dependency';
    console.log(answer);
    method(...);

    동기 화 가 져 오기
    ES6
  • import
  • import MyModule from './my-module.js';
    import { NamedExport } from './other-module.js';

    CommonJS
  • 다른 모듈 의 내 보 내기 를 동기 화 하 는 방식 으로 검색 합 니 다.var myModule = require('my-module');
  • 모듈 의 ID 를 동기 화 하 는 방식 으로 가 져 옵 니 다.require.resolve('dependency') 컴 파일 러 (copiler) 가 의존 항목 이 최종 출력 bundle 에서 사용 할 수 있 도록 합 니 다.(모듈 ID 로 되 돌 아 왔 지만 실제로 가리 키 는 모듈 은 현재 모듈 에 불 러 왔 습 니 다)
  • webpack 에서 모듈 ID 는 하나의 숫자 (NodeJS 에 서 는 하나의 문자열 인 파일 이름) 입 니 다.

  • 여러 곳 에서 같은 모듈 을 인용 하면 최종 적 으로 한 번 의 모듈 실행 과 한 번 의 내 보 내기 만 발생 하기 때문에 이 인 터 페 이 스 를 제공 하여 모듈 캐 시 를 가 져 옵 니 다.require.cache[require.resolve('dependency')];
  • 모듈 삭제.delete require.cache[require.resolve('dependency')];

  • Webpack
  • require. context 프로그램 화 된 정의 가 져 오기 로 대량 가 져 올 수 있 습 니 다.require 함 수 를 되 돌려 줍 니 다. 이 함 수 는 세 가지 속성 이 있 습 니 다. resolve, keys, id (이 require 함 수 는 CommonJS 의 require 함수 가 아 닙 니 다)
  • resolve: 함수 입 니 다. 그 는 해 석 된 모듈 의 id
  • 를 되 돌려 줍 니 다.
  • keys: 함수 입 니 다. 그 는 하나의 배열 로 되 돌 아 왔 습 니 다. 이 배열 은 문맥 모듈 에 의 해 분 석 될 수 있 는 모든 요청 대상 으로 구성 되 어 있 습 니 다 (파일 이름 문자열 로 구 성 된 배열)
  • id: 상하 문 모듈 의 id (?)
  • 이 require 함수 가 keys 가 돌아 오 는 배열 의 파일 이름 을 입력 할 때 구성 요소 의 설정 정 보 를 되 돌려 줍 니 다
  • //   
    require.context(
      directory: String,    //           
      includeSubdirs: Boolean    //          /*    ,     true */,
      filter: RegExp    //                 /*     */
    )
    
    //   
    import BaseButton from './components/BaseButton.vue'
    import BaseIcon from './components/BaseIcon.vue'
    import BaseInput from './components/BaseInput.vue'
    //    
    const requireComponent = require.context(
      './components',    //           
      false,    //         
      /Base[A-Z]\w+\.(vue|js)$/    //                
    )
    
    // require.context      requireComponent(fileName)
    //              ,                  ,       
    // require.contex resolve      export default export(resolve    ?)
    requireComponent.keys().forEach(fileName => { // keys     ,         ,                        (            )
      const componentConfig = requireComponent(fileName)    //       
      //       PascalCase   
      const componentName = upperFirst( // lodash    ,            
        camelCase( // lodash    ,                
          //          `./`        
          fileName.replace(/^\.\/(.*)\.\w+$/, '$1')    //   ./   .[a-zA-Z_]         ,'$1' replace   :         ,'$1'    1                 
        )
      )
    
      //       
      Vue.component(
        componentName,
        //             `export default`    ,
        //          `.default`,
        //            。
        componentConfig.default || componentConfig
      )
    })
    
    
    // require.context      ,    resolve          id,              
    var context = require.context('components', true, /\.html$/);
    var componentA = context.resolve('componentA');
  • require. resolve Weak 는 module 을 bundle 에 도입 하지 않 습 니 다.이른바 '약 (weak)' 의존 이다.(보조 패키지 의 조건 으로 서버 렌 더 링 SSR?)
  • if(__webpack_modules__[require.resolveWeak('module')]) {
      //      ,      ……
    }
    if(require.cache[require.resolveWeak('module')]) {
      //         ,      ……
    }
    
    //          require/import     ,
    //       (“   ”)。
    const page = 'Foo';
    __webpack_modules__[require.resolveWeak(`./page/${page}`)];

    비동기 가 져 오기
    ES6
  • import 규범 은 제어 모듈 의 이름 이나 다른 속성 을 허용 하지 않 습 니 다. "chunks" 는 웹 팩 의 한 개념 이기 때 문 입 니 다.다행히도 웹 팩 에 서 는 설명 을 통 해 특수 한 인 자 를 받 을 수 있 으 며 규정 을 파괴 할 필요 가 없습니다.
  • webpackInclude: 해석 (import resolution) 을 가 져 오 는 과정 에서 일치 하 는 정규 표현 식 에 사용 합 니 다.일치 하 는 모듈 만 포 장 됩 니 다 (파일 이름 만).
  • webpackExclude: 해석 (import resolution) 을 가 져 오 는 과정 에서 일치 하 는 정규 표현 식 에 사용 합 니 다.일치 하 는 모든 모듈 은 압축 되 지 않 습 니 다 (파일 이름 만).
  • webpackChunk Name: 새 chunk 의 이름 입 니 다.웹 팩 2.6.0 부터 [index] and [request] 자리 표시 자 는 각각 증가 하 는 숫자 와 실제 해석 파일 이름 을 부여 하 는 것 을 지원 합 니 다.
  • webpackMode: webpack 2.6.0 부터 서로 다른 모드 로 동적 가 져 오 기 를 지정 할 수 있 습 니 다.
  • "lazy" (기본 값): 모든 import () 가 져 온 모듈 에 지연 로 딩 (lazy - loadable) chunk 를 생 성 합 니 다.
  • "lazy - once": 모든 import () 호출 을 만족 시 킬 수 있 는 단일 지연 로드 (lazy - loadable) chunk 를 생 성 합 니 다.(이 모드 는 일부 동적 구문 에서 만 의미 가 있 습 니 다. 예 를 들 어 import ./locales/${language}.json 는 여러 개의 요청 한 모듈 경 로 를 포함 할 수 있 습 니 다.)
  • "eager": 추가 적 인 chunk 가 생 성 되 지 않 습 니 다. 모든 모듈 은 현재 chunk 에 도입 되 었 고 추가 적 인 네트워크 요청 이 없습니다.Promise 로 돌아 가지 만 resolved 상태 입 니 다.정적 가 져 오기 와 상대 적 으로 import () 를 호출 하기 전에 이 모듈 은 실행 되 지 않 습 니 다.
  • "weak": 모듈 을 불 러 오고 Promise 로 돌아 가 려 고 시도 하지만 클 라 이언 트 에 이 chunk 가 있 을 때 만 성공 적 으로 해석 할 수 있 습 니 다.이 모듈 을 사용 할 수 없다 면 Promise 는 rejected 상태 이 며 네트워크 요청 은 영원히 실행 되 지 않 습 니 다.

  • ./locale/${language} 최소한 파일 의 경로 정보 가 필요 합 니 다. 웹 팩 을 포장 할 때 모든. / locale / 를 하나의 chunk 아래 에 포장 합 니 다
  • //     
    import(
      /* webpackChunkName: "my-chunk-name" */
      /* webpackMode: "lazy" */
      'module'
    );
    
    //       
    import(
      /* webpackInclude: /\.json$/ */
      /* webpackExclude: /\.noimport\.json$/ */
      /* webpackChunkName: "my-chunk-name" */
      /* webpackMode: "lazy" */
      `./locale/${language}`
    );

    CommonJS
  • require.ensure
  • require.ensure(
      dependencies: String[], //         ,   callback             。
      //          ,webpack        。
      // require      ,         。          ,     require()      。          ,       require()   。     require           webpack  
      callback: function(require), 
      errorCallback: function(error), 
      chunkName: String //     chunk    。       chunkName        require.ensure()   ,                   chunk  ,                bundle。
    )

    AMD
  • require require(dependencies: String[], [callback: function(...)])

  • Webpack
  • require. include 는 실행 할 필요 가 없 는 의존 도 를 도입 하여 출력 chunk 의 의존 모듈 위 치 를 최적화 할 수 있 습 니 다.
  • equire.include('a');
    require.ensure(['a', 'b'], function(require) { /* ... */ });
    require.ensure(['a', 'c'], function(require) { /* ... */ });
    
    //         :
    // entry chunk: file.js and a
    // anonymous chunk: b
    // anonymous chunk: c
    //       require.include('a'),        chunk      a。

    CSS 모듈 화 가 져 오기 사용 방법
  • import cssName frome 'cssUrl'
  • 자 바스 크 립 트 에서 CSS Modules 로 CSS 나 다른 예 처리 파일 을 가 져 옵 니 다. 이 파일 은. module. (css | less | sas | scss | styl) 로 끝내 야 합 니 다
  • Scope CSS 사용 에 협조 할 수 없 습 니까?
  • 모듈 화 처리 입구 일 뿐 빈 대상 을 되 돌려 줍 니 다
  • CSS Modules 를 사용 하지 않 아 도 프로세서 언어 를 직접 사용 할 수 있 을 것 같 습 니 다
  • @import url("fineprint.css");구체 적 인 사용 방법 은 style 에 css 를 도입 하 는 방법 인 것 같 습 니 다.
  • @import "@/variables.scss"; vue. config. js 에 존재 합 니까?

  • 링크 라벨 이 프로젝트 에 도입 되면 모듈 로 처 리 됩 니까?

  • 다음으로 전송:https://www.cnblogs.com/qq3279338858/p/9875995.html

    좋은 웹페이지 즐겨찾기