[Javascript] module.exports vs exports

JungChihoon·2019년 12월 26일
0

Javascript

목록 보기
1/6

참조
https://www.zerocho.com/category/NodeJS/post/5835b500373b5b0018a81a10
https://www.daleseo.com/js-module-require

exports와 module.exports의 차이

모듈을 내보낼 때 헷갈리는 또 한가지로 exports와 module.exports가 있다.
배울 때는 감으로 어느 정도 알겠다가도 코드를 칠 때 다시 헷갈리는 부분이 있어서 정리를 한다.
우선 이 두가지 중 골라서 사용할 때 생각할 수 있는 간단한 방법으로는
1. 여러 개의 객체를 내보낼 경우, exports 변수의 속성으로 할당한다.
2. 딱 하나의 객체를 내보낼 경우, module.exports 변수 자체에 할당한다.

이렇게 생각하고 사용하는 게 우선 편한 것 같다.
이 두가지 내보내기에 대한 것에 대해 정리하면 다음과 같다.

  1. module.exports
// module.js
var template = {
a: 'a',
b: 'b'
}
module.exports = template;

// 또는
module.exports = {
  a: 'a',
  b: 'b'
}

// 사용: test.js
var template = require('test.js');
console.log(template.a);
// a ```

2. exports

```javascript
// module.js
var template = {
a: 'a',
b: 'b'
}
exports.foo = template;

// 또는
exports.foo = {
a: 'a',
b: 'b'
}

// 사용: test.js
var template = require('test.js);
console.log(template.foo.a);
// a
  • module.exports와 exports의 차이점
var module = {exports: {}}
var exports = module.exports;

/* exports객체는 module.exports와 같음
exports 객체는 module.exports 객체를 call by reference방식으로 바라보고 있음
  1. 결론
    exports 는 property 방식으로 사용
    module.exports 는 바로 사용가능
var template = { a: 'a', b: 'b' }

module.exports.foo = template //(o)
module.exports = template //(o)
profile
주니어 개발자

0개의 댓글