module.exports와 exports의 차이를 살펴보던 중 쉬운 설명과 깔끔한 코드로 간단하게 설명해준 글(링크)이 있어 공부차 참고하여 포스팅하게 되었다.
1. 모듈이란?
모듈은 특정한 기능을 하는 함수나 변수들의 집합이다.
코드의 길이를 줄이고, 유지보수를 용이하게 할 수 있다는 장점이 있다.
이러한 모듈을 export하는 두 가지 방법인 module.exports와 exports의 차이점을 알아보자.
2. module.exports
module.js
const john = {
name: "John",
intro: "Hi"
}
module.exports = john;
main.js
const user = require('./module');
console.log(user);
output
$ node main
{ name: 'John', intro: 'Hi' }
main.js에서 정상적으로 module.js에서 작성한 john이라는 객체를 가져올 수 있다.
3. exports
exports도 위의 module.exports와 같이 작성해보자.
exports.js
const john = {
name: "John",
intro: "Hi"
}
exports = john;
main.js
const user = require('./exports');
console.log(user);
output
$ node main
{}
의도와 다르게 원하는 객체가 제대로 가져와지지 않았다.
다음과 같이 프로퍼티에 접근하는 형태로 코드를 수정해보자.
exports.js
const john = {
name: "John",
intro: "Hi"
}
exports.person = john;
main.js
const user = require('./exports');
console.log(user.person);
output
$ node main
{ name: 'John', intro: 'Hi' }
원하는 객체가 정상적으로 가져와졌다.
4. 비교
단순한 코드로 exports와 module.exports의 차이를 설명하자면 다음과 같다.
const module = { exports: {} };
const exports = module.exports;
function require(path) {
...
return module.exports; // require() 함수의 리턴값
}
exports와 module.exports는 동일한 객체를 바라보고 있지만, exports는 module.exports를 참조(call by reference)하는 형태이다. 따라서 exports = a의 형태로 코드를 작성하게 된다면 module.exports에 대한 참조가 끊어지고 변수 a의 값을 가진다.
공식문서에는 exports는 module.exports의 축약형(shortcut)이라고 언급되어 있는데, 이렇게 생각하기 보다는 위의 설명이 좀 더 정확하고 이해하기 쉬운 것 같다.
5. 결론
- exports는 module.exports를 참조하고 있다.
- exports는 프로퍼티에 접근하는 방식으로 사용한다.
- module.exports는 바로 사용한다.
- 헷갈린다면 module.exports를 사용하자!
const john = {
name: "John",
intro: "Hi"
}
module.exports.person = john; // (o)
module.exports = john; // (o)
exports.person = john; // (o)
exports = john; // (x)
Reference
www.freecodecamp.org/news/node-js-module-exports-vs-exports-ec7e254d63ac/
'웹 > Node.js' 카테고리의 다른 글
[Node.js] MySQL에서 escaping을 사용하는 2가지 방법 비교 (0) | 2021.05.08 |
---|---|
[Node.js] 비동기식 mysql을 사용하는 이유 (async/await) (3) | 2021.04.14 |
[Node.js] JWT: Access Token & Refresh Token 인증 구현 (16) | 2021.04.06 |
[Node.js] MongoDB: 개념 및 기본 쿼리문 (0) | 2021.03.14 |
[Node.js] Express 6: 쿠키와 세션 (Cookie & Session) (2) | 2021.02.22 |