본문 바로가기
Node.js

exports와 module.exports 비교

by _sweep 2022. 2. 26.

 

 

✅ exports와 module.exports 비교

Node.js가 사용하는 CommonJS 방식으로 모듈을 선언하는 것은 exports와 module.exports의 두 가지 방법이 존재한다.

 

 

✔️ exports

--- a.js ---
exports.A = (a, b) => a + b;

--- b.js ---
const Func = require('./a');

console.log(Func);
console.log(Func.A(1, 2));

// output
// { A: [Function (anonymous)] }
// 3

 

a.js에서 A라는 함수를 exports 했고 이를 b.js에서 require해 Func로 받아왔다.

이때 Func를 출력해보면 객체 안에 A라는 함수가 담겨있는 것을 확인할 수 있다.

따라서 A라는 함수를 b.js에서 사용하기 위해서는 Func.A로 접근해야 한다.

 

✔️ module.exports

--- a.js ---
const A = (a, b) => a + b;

module.exports = A;

--- b.js ---
const Func = require("./a");

console.log(Func);
console.log(Func(1, 2));

// output
// [Function: A]
// 3

 

a.js에서 A라는 함수를 선언한 뒤 module.exports 했고 이를 b.js에서 require해 Func로 받아왔다.

이때 Func를 출력하면 바로 Function: A라고 출력되는 것을 확인할 수 있다.

exports와 달리 Func가 함수 A의 역할을 하고 Func에 인자를 넘기면 바로 A 함수를 계산한 결과가 담기는 것을 볼 수 있다.

 

✔️ 비교

exports가 call by reference로 module.exports를 바라보고 있고 리턴되는 값은 항상 module.exports이다.

exports는 결국 module.exports = { }와 동일하다고 볼 수 있다.

 

exports.A = (a, b) => a + b;

module.exports = {
    A: (a, b) => a + b;
}

 

따라서 exports로 선언했을 때 다른 파일에서 이 함수 혹은 변수를 가져다 쓰려면 require한 객체 안에 접근해야 한다.

 

 

🔍 참조

module.exports와 export의 차이점 https://programmingsummaries.tistory.com/340

 

 

 

 

 

 

댓글