개발하는 애플리케이션의 크기가 커지면 언젠간 파일을 기능별로 분리해야 하는 시점이 온다. 이때 분리된 파일 각각을 '모듈(module)'이라고 부른다.
즉, 모듈은 스크립트 파일 하나를 의미하고 모듈을 관리하는 다양한 기능을 제공하는 시스템을 모듈 시스템이라 한다.
간단히 요약하자면,
.cjs 또는 .mjs로 설정package.json 설정type 속성을 commonjs 또는 module로 설정CommonJS
module.js 내보내기
function sum(x = 0, y = 0) {
return x + y;
}
module.exports = {
sum
}
main.js 불러오기
const { sum } = require('./module');
// const module = require('./module');
console.log(sum(1, 1)); // 2
ES module
module.js 내보내기
export default function add(x = 0, y = 0) {
return x + y;
}
main.js 불러오기
import add from './module.js';
console.log(add(200, 200)); // 400
표준인 ES module이 우위를 차지하는 추세인 듯 하며 현재 Node.js 최신 버전에서는 ES Module이 공식적으로 사용되고 있다. 그러나 지금까지 많은 라이브러리들이 CommonJS로 작성되었으며, 두 Module System은 기본적으로 동작이 달라 서로 호환되기 어렵기 때문에 동작방식을 이해하고 차이점을 이해하는 것은 중요하다.
토스 기술 블로그
CommonJS와 ESM에 모두 대응하는 라이브러리 개발하기
https://toss.tech/article/commonjs-esm-exports-field