본문 바로가기

Node.js/일반

node.js에서 module.exports와 require 이해하기

1. module.exports

 

node에서 module에 뭐가 들어 있는지 console.log로 확인해보면

다음과 같은 속성들이 여럿 나온다.

 

Module {

    id: '.',

    exports: {},

    parent: null,    

    ...

}

 

이 중 exports를 보면 node로 작성된 자바스크립트 언어에서 흔히 보이는

module.exports 이하가 뭘 의미하는지 파악할 수 있다.

 

하나의 파일 안에서만 유효한 함수나 변수를 module.exports 객체에 담아

다른 파일에서 참조할 수 있게 하는 것이다.

 

function func() {

}

module.exports.func = func;

 

위에서는 func라는 함수를 exports 객체에 func라는 이름으로 담는다.

아래처럼 되는 것과 같다.

 

Module {

    id: '.',

    exports: {

        func: func 함수

    },

    parent: null,    

    ...

}

 

하나의 함수만 exports에 담을 경우

exports에 직접 넣을 수도 있다.

 

function func() {

}

module.exports = func;

 

Module {

    id: '.',

    exports: func 함수,

    parent: null,    

    ...

}

 

 

 

2. require

 

exports에 어떻게 넣었느냐에 따라서

다른 파일에서 불러올 때의 형태도 달라진다.

 

const func = require('./func');

func.func();

// 또는 func();

 

require로 func.js 파일을 불러오면

func.js의 Module.exports에 담겨있는 

객체나 메소드를 사용할 수 있다.

 

require는 built-in 모듈을 불러올 때도 사용한다.

 

const http = require('http');

 

 

 

3. Module Wrapper Function

 

modue.exports와 require를 쓸 수 있는 이유는

node.js의 파일들은 실행될 때 기본적으로 다음의 함수가 감싼 것처럼 처리되기 때문이다.

 

(function (exports, require, module, __filename, __dirname) {

    // 파일 내용

}

 

인자로 module.exports와 require를 쓸 수 있다.

exports는 module.exports를 가리킨다.

module.exports를 간단히 쓰기 위해서 마련된 것 같다.