복붙노트

[NODEJS] 무엇 Node.js를의 module.exports의 목적은 당신이 어떻게 사용합니까?

NODEJS

무엇 Node.js를의 module.exports의 목적은 당신이 어떻게 사용합니까?

해결법


  1. 1.module.exports 실제로 통화를 요구의 결과로 반환 된 개체입니다.

    module.exports 실제로 통화를 요구의 결과로 반환 된 개체입니다.

    수출 변수가 처음에 그 같은 객체로 설정되어 있으므로 모듈의 코드에서, (그것이 속기 "별칭을"입니다 즉) 당신 것 같은 일반적으로 쓰기 뭔가 :

    let myFunc1 = function() { ... };
    let myFunc2 = function() { ... };
    exports.myFunc1 = myFunc1;
    exports.myFunc2 = myFunc2;
    

    수출 (또는 "노출") 내부적으로 범위 기능 myFunc1 및 myfunc2로부터.

    그리고 호출 코드에 다음을 사용 :

    const m = require('./mymodule');
    m.myFunc1();
    

    어디 요구의 결과가 (일반적으로) 어떻게 마지막 라인 쇼, 그 속성을 액세스 할 수 있습니다 단지 일반 객체입니다.

    NB : 당신 덮어 쓰기 수출 한 후 더 이상 module.exports을 참조하지 않습니다. 당신이 수출에 새로운 객체 (또는 함수 참조)를 할당 할 경우, 그럼 당신은 또한 module.exports에 그 새로운 객체를 할당해야

    당신이 할 수 있도록 수출 객체에 추가 이름, 모듈이 내부적으로 당신이 추가하는 것을 값에 이름을 범위됩니다으로 동일하지 않음을 지적 그것의 가치 :

    let myVeryLongInternalName = function() { ... };
    exports.shortName = myVeryLongInternalName;
    // add other objects, functions, as required
    

    다음 :

    const m = require('./mymodule');
    m.shortName(); // invokes module.myVeryLongInternalName
    

  2. 2.이것은 이미 대답하지만 몇 가지 설명을 추가하고 싶었되었습니다 ...

    이것은 이미 대답하지만 몇 가지 설명을 추가하고 싶었되었습니다 ...

    이 같은 응용 프로그램에 수입 코드를 모두 수출과 module.exports을 사용할 수 있습니다 :

    VAR의 mycode에 필요한 = ( './ 패스 /로 / mycode');

    당신이 (예를 들어, ExpressJS 예제 코드에서) 볼 기본적인 사용 사례 당신이 수출에 등록하면 다음 필요로 사용하여 가져 오는 것이은 .js 파일에 객체를 설정하는 것이있다 ()

    간단한 계산의 예 그래서, 당신은 할 수 있습니다 :

    (counter.js) :

    var count = 1;
    
    exports.increment = function() {
        count++;
    };
    
    exports.getCount = function() {
        return count;
    };
    

    ... 다음 응용 프로그램 (정말 web.js, 또는 기타의 .js 파일)의 :

    var counting = require('./counter.js');
    
    console.log(counting.getCount()); // 1
    counting.increment();
    console.log(counting.getCount()); // 2
    

    간단히 말해, 당신은 하나의 객체를 반환하는 함수로 필요한 파일 생각할 수있는, 당신은 수출을 설정하여 반환 된 객체에 속성 (문자열, 숫자, 배열, 함수, 무엇이든)을 추가 할 수 있습니다.

    때때로 당신은 필요 () 호출에서 반환 된 객체는 호출 할 수있는 기능이 아닌 속성 만 대상으로 할 것입니다. 이 경우이 같은도 설정 module.exports, 필요 :

    (sayhello.js) :

    module.exports = exports = function() {
        console.log("Hello World!");
    };
    

    (app.js) :

    var sayHello = require('./sayhello.js');
    sayHello(); // "Hello World!"
    

    수출과 module.exports의 차이는 여기이 답변에 잘 설명되어 있습니다.


  3. 3.참고 NodeJS 모듈 메커니즘은 RequireJS 같은 많은 다른 구현에서 지원되지만 CommonJS 모듈을 기반으로하는 것도 SproutCore를, CouchDB를, Wakanda, OrientDB, ArangoDB, RingoJS, TeaJS, SilkJS, curl.js, 또는 PSLib를 통해 심지어 어도비 포토샵 ( ). 현재 알려진 구현의 전체 목록을 찾을 수 있습니다.

    참고 NodeJS 모듈 메커니즘은 RequireJS 같은 많은 다른 구현에서 지원되지만 CommonJS 모듈을 기반으로하는 것도 SproutCore를, CouchDB를, Wakanda, OrientDB, ArangoDB, RingoJS, TeaJS, SilkJS, curl.js, 또는 PSLib를 통해 심지어 어도비 포토샵 ( ). 현재 알려진 구현의 전체 목록을 찾을 수 있습니다.

    모듈 사용 노드 특정 기능이나 모듈 않는 한, 내가보기 엔 대신 CommonJS 표준의 일부가 아닌 다음 주로 다른 구현에서 지원하지 module.exports의 수출을 사용하여 다음 바랍니다.

    대신 그냥이 스레드에서 제드 왓슨에 의해 제공되는 마지막 예제처럼 그것에 속성과 메서드를 추가 수출에 새로운 객체에 대한 참조를 할당 할 때 또 다른 NodeJS의 특정 기능입니다. 개인적으로 CommonJS 모듈 메커니즘의 순환 참조 지원이 중단으로 이러한 행위를 억제한다. 그러므로 모든 구현에 의해 지원되지 않으므로 드의 예는보다 보편적 인 모듈을 제공하는이 방법 (또는 유사한 하나)를 기록한다 :

    (sayhello.js) :

    exports.run = function() {
        console.log("Hello World!");
    }
    

    (app.js) :

    var sayHello = require('./sayhello');
    sayHello.run(); // "Hello World!"
    

    또는 ES6 기능을 사용하여

    (sayhello.js) :

    Object.assign(exports, {
        // Put all your public API here
        sayhello() {
            console.log("Hello World!");
        }
    });
    

    (app.js) :

    const { sayHello } = require('./sayhello');
    sayHello(); // "Hello World!"
    

    PS : 그것은 또한 Appcelerator 구현 CommonJS 모듈처럼 보이지만 원형 기준 지원없이 (참조 : Appcelerator 및 CommonJS 모듈 (캐싱 및 순환 참조))


  4. 4.당신이 수출 및 / 또는 modules.exports에 새로운 객체에 대한 참조를 할당 할 경우주의해야합니다 일부 몇 가지 :

    당신이 수출 및 / 또는 modules.exports에 새로운 객체에 대한 참조를 할당 할 경우주의해야합니다 일부 몇 가지 :

    이 사람은 분명하지만, 기존 모듈의 시작 부분에 보낸 방법을 추가하는 경우, 반드시 네이티브 수출 객체가 마지막에 다른 객체를 참조하지 않는 일

    exports.method1 = function () {}; // exposed to the original exported object
    exports.method2 = function () {}; // exposed to the original exported object
    
    module.exports.method3 = function () {}; // exposed with method1 & method2
    
    var otherAPI = {
        // some properties and/or methods
    }
    
    exports = otherAPI; // replace the original API (works also with module.exports)
    
    exports = function AConstructor() {}; // override the original exported object
    exports.method2 = function () {}; // exposed to the new exported object
    
    // method added to the original exports object which not exposed any more
    module.exports.method3 = function () {}; 
    
    // override the original exported object
    module.exports = function AConstructor() {};
    
    // try to override the original exported object
    // but module.exports will be exposed instead
    exports = function AnotherConstructor() {}; 
    

  5. 5.module.exports 속성 또는 수출 오브젝트는 모듈이 응용 프로그램과 함께 공유해야하는지 선택할 수 있습니다

    module.exports 속성 또는 수출 오브젝트는 모듈이 응용 프로그램과 함께 공유해야하는지 선택할 수 있습니다

    여기 module_export 사용할 수에 비디오를


  6. 6.여러 파일을 통해 프로그램 코드를 분할 할 때, module.exports는 모듈의 소비자 변수와 함수를 게시하는 데 사용됩니다. 소스 파일의 필요 () 호출은 모듈에서로드 module.exports 대응으로 대체됩니다.

    여러 파일을 통해 프로그램 코드를 분할 할 때, module.exports는 모듈의 소비자 변수와 함수를 게시하는 데 사용됩니다. 소스 파일의 필요 () 호출은 모듈에서로드 module.exports 대응으로 대체됩니다.

    모듈을 작성할 때 기억

    "- 쓰기 모듈 모듈 2 부"에 따르면.


  7. 7.참조하기 링크는 다음과 같이이다 :

    참조하기 링크는 다음과 같이이다 :

    exports = module.exports = function(){
        //....
    }
    

    이러한 함수 또는 변수로 수출 또는 module.exports의 특성은 외부로 노출 될

    수출을 오버라이드 (override)하지 않는 : 당신이 더 많은 관심을 지불해야 뭔가가있다.

    왜 ?

    수출 module.exports 단지 참조하기 때문에, 당신은 수출에 속성을 추가 할 수 있지만 당신이 수출을 오버라이드 (override)하는 경우는, 참조 링크가 깨진 것입니다.

    좋은 예 :

    exports.name = 'william';
    
    exports.getName = function(){
       console.log(this.name);
    }
    

    나쁜 예 :

    exports = 'william';
    
    exports = function(){
         //...
    }
    

    당신은이 같은 노출 하나의 함수 나 변수에 원하는 경우 :

    // test.js
    var name = 'william';
    
    module.exports = function(){
        console.log(name);
    }   
    
    // index.js
    var test = require('./test');
    test();
    

    이 모듈은 하나 개의 함수를 노출 이름 속성은 외부 개별이다.


  8. 8.다운로드 및 HTTP, SYS 등과 같은 Node.js를 설치하면 Node.js를 몇 가지 기본 또는 기존 모듈이 있습니다

    다운로드 및 HTTP, SYS 등과 같은 Node.js를 설치하면 Node.js를 몇 가지 기본 또는 기존 모듈이 있습니다

    그들이 Node.js를 이미 있기 때문에 우리는이 모듈을 사용하고자 할 때, 우리는 기본적으로 수입 모듈 좋아한다, 그런데 왜? 그들은 node.js.에 이미 존재하기 때문에 가져 오기는 Node.js를에서 그들을 복용하고 프로그램에 넣어 같다. 그리고 그들을 사용.

    수출은 정확히 반대되는 반면에, 당신은 당신이 원하는 모듈을 만드는,하자가 모듈 addition.js과 Node.js를에 해당 모듈을 넣어, 당신은 그것을 내보내 그것을 말한다.

    내가 여기에 아무것도를 작성하기 전에, module.exports.additionTwo가 exports.additionTwo으로 동일 기억


  9. 9.모듈은 단일 코드 유닛에 관련된 코드를 캡슐화한다. 모듈을 만들 때,이 파일에 관련된 모든 기능을 이동하는 것으로 해석 될 수있다.

    모듈은 단일 코드 유닛에 관련된 코드를 캡슐화한다. 모듈을 만들 때,이 파일에 관련된 모든 기능을 이동하는 것으로 해석 될 수있다.

    가정하자 두 가지 기능을 포함하는 파일 Hello.js있다

    sayHelloInEnglish = function() {
      return "Hello";
    };
    sayHelloInSpanish = function() {
      return "Hola";
    };
    

    코드의 유틸리티는 하나 이상의 호출 때 우리는 함수를 작성.

    우리가 파일을 내보내는이 경우, 다른 파일에 함수의 유틸리티를 높이려는 World.js라고 가정은 module.exports 얻을 수있다 그림에 온다.

    당신은 아래의 코드에 의해 기능을 모두 내보낼 수 있습니다

    var anyVariable={
     sayHelloInEnglish = function() {
          return "Hello";
        };
      sayHelloInSpanish = function() {
          return "Hola";
        }; 
    }
    module.export=anyVariable;
    

    이제 당신은 그 기능을 사용하는 inorder를 World.js에 파일 이름이 필요합니다

    var world= require("./hello.js");
    

  10. 10.의도 있습니다 :

    의도 있습니다 :

    위키 백과

    나는 그것이 모듈 / 재사용 가능한 코드없이 큰 프로그램을 작성하는 것이 어려워진다 상상한다. nodejs에서 우리는 우리가 노출 및 요구와 우리의 프로그램을 구성하는 것을 정의 module.exports를 사용하는 모듈 형 프로그램을 만들 수 있습니다.

    fileLog.js

    function log(string) { require('fs').appendFileSync('log.txt',string); }
    
    module.exports = log;
    

    stdoutLog.js

    function log(string) { console.log(string); }
    
    module.exports = log;
    

    program.js

    const log = require('./stdoutLog.js')
    
    log('hello world!');
    

    실행

    이제 ./fileLog.js에 대한 ./stdoutLog.js을 교환하려고합니다.


  11. 11.그것은 다음과 같은 일을 수행 :

    그것은 다음과 같은 일을 수행 :

    모듈을 갖는 것은 쉽게 우리의 코드를 더 유지 보수하게 코드의 특정 부분을 찾을 수 있습니다.

    NodejS는 다음과 같은 방식으로 작동하는 CommomJS 모듈 시스템을 사용합니다 :

    test1.js

    const test2 = require('./test2');    // returns the module.exports object of a file
    
    test2.Func1(); // logs func1
    test2.Func2(); // logs func2
    

    test2.js

    module.exports.Func1 = () => {console.log('func1')};
    
    exports.Func2 = () => {console.log('func2')};
    

  12. 12.

    let test = function() {
        return "Hello world"
    };
    exports.test = test;
    
  13. from https://stackoverflow.com/questions/5311334/what-is-the-purpose-of-node-js-module-exports-and-how-do-you-use-it by cc-by-sa and MIT license