- 모든 모듈은 자신만의 독립적인 영역이 있어야 한다.
- 모듈 정의는 전역객체인 exports 객체를 이용한다.
- 모듈 사용은 require 함수를 이용한다.
범용적인 목적으로 JavaScript를 사용하지 위한 필수 과제는 모듈화이다. Node.js도 이런 모듈화 작업덕에 탄생할 수 있었다. 이러한 모듈화를 가능하게 해주는 것이 바로 CommonJS다.
// foo.js
exports.foo = () => {}
// bar.js
module.exports.bar = () => {}
// script.js
const foo = require('./foo')
const bar = require('./bar')
exports
혹은 module.exports
를 통해서 모듈화를 정의할 수 있다. 그리고 이 모듈을 사용할 스크립트에서 require('파일 경로')
를 통해서 사용할 수 있다.
exports
와 module.exports
은 두 가지 모두 같은 역할을 한다. 굳이 나누자면 exports
는 module.exports
의 숏컷이다. 다시 말해 사용을 도와주는 역할에 지나지 않고 module.exports
를 참조할 뿐이다.
물론 exports
를 통해서 모듈화를 정의는 가능하지만 만약 두 개를 혼용해서 사용하면 module.exports
에 정의된 값이 우선순위를 갖게된다.
때문에 위와 같은 문제를 야기하지 않기 위해서 exports
혹은 module.exports
둘 중 하나만을 사용해서 코드를 작성하는 것이 좋다.