코드/JS

[CJS] module.exports, exports

Yeah-Panda 2022. 12. 23. 13:34

commonJS 에서 모듈 export 할때 보통은

const m = {
  a: 1,
  b: function () {
    return 'b';
  }
}
module.exports = m;

같은 형태를 취하지만 module 객체말고 exports 객체로도 모듈을 만들수 있다.

 

exports.odd = '홀수입니다';
exports.even = '짝수입니다';

module.exports 로 한번에 대입하는 대신 각각 exports 객체에 속성으로 던져줌.

동작은 동일함. module.exports  와  exports 가 같은 객체를 참조하기 때문에. ( module.exports === exports // true )

exports.anyFunc 에 특정 함수를 넣으면 module.exports에도 동일한 함수가 들어간다.

 

exports  객체 사용시에는 module.exports 와의 참조 관계가 깨지지 않아야 한다.

module.exports 에는 어떤 값이든 참조 가능하지만 exports 에는 반드시 속성으로 값을 부여해야 한다.

exports 에 다른 값을 대입하면 module.exports 와의 참조 관계가 끊어져 해당 파일은  모듈로 동작하지 않는다.

exports 를 사용할 경우는 exports 가 객체인 경우에 한함으로 exports = () => {} 로 정의된 케이스에는 사용할 수 없다

exports 와  module.exports 에는 참조 관계가 있음으로 동시에 사용하는 건 피하는게 좋다

'코드 > JS' 카테고리의 다른 글

[JS] 자바스크립트 주석  (0) 2023.04.19
[NPX] 실행 옵션  (0) 2022.12.13
[JS] URL 파싱  (0) 2020.12.22
[JS] Base64 Decode  (0) 2020.05.29
[JS] MessageChannel  (0) 2020.05.21