import,require,export,module 이해하기export

5404 단어 requirenode.jses6

import,require,export,module 이해하기export


ES6의 모듈 설계


모듈 디자인의 사상은 최대한 정태화하여 번역할 때 모듈의 일차 관계와 입력과 출력의 변수를 확정할 수 있도록 하는 것이다.
CommonJS와 AMD는 모두 실행할 때만 이 물건들을 확인할 수 있습니다. commonJS 모듈은 대상입니다. 입력할 때 대상 속성을 찾아야 합니다.
// CommonJS 
let { stat, exists, readFile } = require('fs');

//  
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;

nodeJS에서 모듈화는 CommonJS의 규범을 사용하는데 실질은 전체적으로 fs모듈을 불러와 fs 를 생성하는 것이다대상, 대상에서 속성과 방법을 읽습니다. 이런 로드 방식은'운행시 로드'입니다.

ES6 모듈


ES6 모듈은 개체가 아닌 export 명령을 통해 출력된 코드를 명시적으로 지정하고 import 명령을 통해 입력합니다.
// ES6 
import { stat, exists, readFile } from 'fs';

위 코드의 실질은 fs 모듈에서 세 가지 방법을 불러오고 다른 방법은 불러오지 않습니다.이런 로드를'컴파일할 때 로드'또는 정적 로드라고 부른다. 즉, ES6는 컴파일할 때 모듈 로드를 완성할 수 있어 CommonJS 모듈의 로드 방식보다 효율이 높다.

export 명령


하나의 모듈은 하나의 독립된 파일이다.이 파일 내부의 모든 변수를 외부에서 가져올 수 없습니다.모듈 내부의 변수를 외부에서 읽을 수 있도록 하려면, 이 변수를 export 키워드로 출력해야 합니다.
// profile.js
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

export의 문법은 대외적으로 인터페이스를 내보내고 인터페이스 이름과 모듈 내부 변수 사이에 일일이 대응하는 관계를 구축했다.
//  
export var m = 1;

//  
var m = 1;
export {m};

//  
var n = 1;
export {n as m};

import 명령


주의, import 명령은 향상 효과가 있어 전체 모듈의 머리로 올라가 먼저 실행됩니다.
현재 단계에서는 Babel 디코딩, CommonJS 모듈의 Require 명령과 ES6 모듈의 import 명령을 통해 같은 모듈에 쓸 수 있지만 이렇게 하지 않는 것이 좋다.import은 정적 해석 단계에서 실행되기 때문에 모듈 중 가장 먼저 실행됩니다.다음 코드는 예상한 결과를 얻지 못할 수도 있습니다.
require('core-js/modules/es6.symbol');
require('core-js/modules/es6.promise');
import React from 'React';

export default 명령


export default 명령은 모듈의 기본 출력을 지정하는 데 사용됩니다.분명히 하나의 모듈은 기본 출력만 있을 수 있기 때문에 export default 명령은 한 번만 사용할 수 있습니다.따라서 import 명령 뒤에는 괄호를 늘릴 필요가 없습니다. 왜냐하면 유일하게 export default 명령에 대응할 수 있기 때문입니다.
본질적으로, export default는default라는 변수나 방법을 출력한 다음, 시스템에서 임의의 이름을 만들 수 있도록 합니다.그래서 아래의 작법은 효과적이다.
// modules.js
function add(x, y) {
  return x * y;
}
export {add as default};
//  
// export default add;

// app.js
import { default as foo } from 'modules';
//  
// import foo from 'modules';

//  
export var a = 1;

//  
var a = 1;
export default a;

//  
export default var a = 1;

CommonJS 사양


모든 파일은 하나의 모듈로 자신의 역할 영역을 가지고 있다.한 파일에 정의된 변수, 함수, 클래스는 모두 개인적이며 다른 파일에는 보이지 않습니다.
CommonJS 사양에 따르면 각 모듈 내부에서 module 변수는 현재 모듈을 나타냅니다.이 변수는 하나의 대상이며, 그 exports 속성 (즉 module.exports) 은 대외 인터페이스이다.어떤 모듈을 불러옵니다. 사실은 이 모듈을 불러오는 모듈입니다.exports 속성입니다.
var x = 5;
var addX = function (value) {
  return value + x;
};
module.exports.x = x;
module.exports.addX = addX;

//  
var example = require('./example.js');

console.log(example.x); // 5
console.log(example.addX(1)); // 6

CommonJS 모듈의 특징


4
  • 모든 코드는 모듈 역할 영역에서 실행되며 전체 역할 영역을 오염시키지 않습니다

  • 4
  • 모듈은 여러 번 불러올 수 있지만 처음 불러올 때 한 번만 실행한 다음에 실행 결과가 캐시되고 나중에 다시 불러오면 캐시 결과를 직접 읽습니다.모듈을 다시 실행하려면 캐시를 지워야 합니다

  • 4
  • 모듈이 로드되는 순서는 코드에 나타나는 순서에 따른다
  • export var foo = 'bar';
    setTimeout(() => foo = 'baz', 500);

    ES6 모듈식 위 코드 출력 변수 foo는 bar이고 값은 500밀리초 후에 baz가 됩니다.
    CommonJS 사양과는 전혀 다릅니다.CommonJS 모듈은 동적 업데이트가 없는 값의 캐시를 출력합니다.

    module 객체


    Node 내부에는 Module 구성 함수가 있습니다.모든 모듈은 모듈의 실례입니다
    module.id 모듈의 식별자, 보통 절대 경로를 가진 모듈 파일 이름입니다.module.filename 모듈의 파일 이름입니다. 절대 경로가 있습니다.module.loaded는 모듈이 불러오는지 여부를 표시하는 브리 값을 되돌려줍니다.module.parent는 이 모듈을 호출하는 모듈을 표시하는 대상을 되돌려줍니다.module.children은 이 모듈에 사용할 다른 모듈을 표시하는 그룹을 되돌려줍니다.module.exports는 모듈의 대외 출력 값을 표시합니다.

    module.exports 속성


    module.exports 속성은 현재 모듈의 대외 출력 인터페이스를 표시하고 다른 파일은 이 모듈을 불러옵니다. 실제로는module를 읽습니다.exports 변수.
    Node는 모듈마다 모듈을 가리키는 exports 변수를 제공합니다.exports.이것은 모든 모듈의 머리에 있는 명령과 같다.
    var exports = module.exports;

    결과적으로 대외 출력 모듈 인터페이스에서 exports 대상에 방법을 추가할 수 있다.
    exports.area = function (r) {
      return Math.PI * r * r;
    };
    
    exports.circumference = function (r) {
      return 2 * Math.PI * r;
    };

    exports 변수를 하나의 값으로 직접 가리킬 수 없습니다. 이것은 exports와module를 끊는 것과 같기 때문입니다.exports와의 연락.
    exports.hello = function() {
      return 'hello';
    };
    
    module.exports = 'Hello world';

    면 코드에서 Hello 함수는 대외적으로 출력할 수 없습니다.module.exports가 다시 할당되었습니다.
    이것은 한 모듈의 대외 인터페이스가 하나의 단일한 값이면 exports 출력을 사용할 수 없고 모듈만 사용할 수 있다는 것을 의미한다.exports 출력.

    디렉토리 로드 규칙


    노드의 모듈 불러오기 규칙과 일치
    일반적으로 우리는 관련 파일을 하나의 디렉터리에 놓아서 조직하기 편리하게 할 것이다.이 때, 이 디렉터리에 입구 파일을 설정하는 것이 좋습니다. 이 입구 파일을 통해 전체 디렉터리를 불러올 수 있도록 합니다.
    디렉토리에 패키지를 배치합니다.json 파일, 그리고 입구 파일을main 필드에 씁니다.다음은 하나의 예다.
    // package.json
    { "name" : "some-library",
      "main" : "./lib/some-library.js" }

    require에서 매개 변수 문자열이 디렉터리를 가리키는 것을 발견하면 이 디렉터리의 패키지를 자동으로 볼 수 있습니다.json 파일,main 필드에서 지정한 입구 파일을 불러옵니다.하면, 만약, 만약...json 파일에main 필드가 없거나 패키지가 없습니다.json 파일은 이 디렉터리에 있는 index를 불러옵니다.js 파일 또는 index.node 파일.

    참고 자료


    CommonJS 사양 모델 구문

    좋은 웹페이지 즐겨찾기