module.exports와 exports 차이점

이동훈·2022년 3월 23일
0

모듈이란?

모듈이란 관련된 객체들의 집합소.
어떠한 기능을 수행하기 위해 함수 또는 객체들을 만들어 놨으면,
그걸 한 .js의 파일에 써놓기엔 가독성이나 유지보수가 좋지 않아서 관련 함수 또는 객체들을 .js파일별로 따로 모아놓은 것

module.exports

test.js

var template = {
	a: 'a',
    b: 'b'
}

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

abc.js

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

exports

exports 모듈 방법

text.js

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

abc.js

var template = require('test.js');
console.log(template.foo.a); // out: a

exports 와 module.exports 의 차이점

▼ 내용

일단 간단하게 소스로 설명하자면 exports와 module.exports의 차이점은

var module = { exports: {} };
var exports = module.exports;
// your code 
return module.exports;

이렇게 되는것이다. 결국 exports객체와 module.exports객체는 동일하며

exports 가 module.exports객체를 call by reference 방식으로 바라보고 있으며, 최종적으로 리턴값은 module.exports 라는것이다.

위의 예제중에서 exports는 property 방식을 쓰고 module.exports는 그냥 바로 썻는데

그 이유는 exports를 바로 써버리면 module.exports의 call by reference 관계를 끊어버려서

exports라는 변수가 되버리기 때문이다.

결론

exports 는 property 방식으로 사용

module.exports 는 바로 사용가능

var  template = { a: 'a', b: 'b'};

module.exports.foo = template; //(o)
module.exports = template; //(o)
module.exports = { a: 'a', b: 'b'} // (o)
exports.foo = template; //(o)
exports = template; //(x)
exports = { a: 'a', b: 'b'} // (x)
profile
한계를 부시는 프론트개발자

0개의 댓글