node.js에서 module.exports 와 exports의 차이점

치즈말랑이·2022년 6월 12일
0

Node.js 디자인 패턴 바이블을 읽다가..

require() 함수는 내부적으로 다음과 같이 되어 있다.

~
  const module = {
    exports: {불러올 모듈 코드의 내용},
    id
  }
~

여기서 id는 모듈의 전체경로이고, 일단은 신경안써도 된다.

// 1번 옳은 예
exports.hello = () => {
	console.log("hello");
}

// 2번 틀린 예
exports = () => {
	console.log("hello");
}

// 3번 옳은 예
module.exports = () => {
	console.log("Hello");
}

이렇게 세가지 경우가 있을 때, 2번의 경우는 잘못된 코드이다.
이미 require 함수를 정의할 때, exports는 객체형태로 초기화 된다.
그래서 exports 객체 내의 속성을 함수로 지정하는것은 되지만, exports 자체를 객체가 아닌 다른 타입으로 재할당하는것은 잘못된 것이다.
따라서 3번처럼 module.exports 자체를 재할당 해서 사용해야 한다.

2번도 재할당 되는게 아니냐 라는 의문이 생길수도 있는데, 2번은 exports 변수만을 재할당 하는것이고 module.exports의 내용을 변경하지 않는다. 책에 더 자세히 쓰여있지 않은 것을 보니, 이것은 node.js 보다는 자바스크립트의 작동방식인것같다.

profile
공부일기

0개의 댓글