JavaScript는 오랜 시간 동안 웹 개발의 중심 언어로 자리 잡아 왔으며, 모듈 시스템의 발전도 이에 맞춰 진화해왔습니다. CommonJS와 **ESM(ECMAScript Modules)**은 JavaScript 모듈 시스템의 두 가지 주요 축입니다. 이번 글에서는 두 시스템의 차이점, 장단점, 그리고 선택 기준에 대해 알아보겠습니다.
1. CommonJS란?
CommonJS는 Node.js에서 기본적으로 사용되는 모듈 시스템입니다. JavaScript가 브라우저 외의 환경에서도 사용되기 시작하면서, 모듈화를 위한 표준이 필요했는데, CommonJS는 이에 대한 초기 솔루션으로 자리 잡았습니다.
CommonJS의 주요 특징
동기적 로딩: commonJS환경에서 모듈은 파일이 로드될 때 즉시 실행됩니다. 때문에 promise를 리턴하지 않고, 설정된 값만을 리턴합니다. 이는 서버 환경에서는 유리하지만 브라우저 환경에서는 비효율적일 수 있습니다.
require와 module.exports 사용:
// 파일 a.jsconst greet = () => { console.log("Hello, CommonJS!");};module.exports = greet;// 파일 b.jsconst greet = require('./a');greet(); // "Hello, CommonJS!"
트리쉐이킹 불가 : ESM과는 다르게, CommonJS에서는 트리쉐이킹이 대체로 불가능합니다. 트리쉐이킹이란 정적으로 코드를 분석 가능할 때 가능한 것입니다. 하지만 CommonJS는 동적 모듈 시스템이기 때문에 근본적으로 트리쉐이킹과 맞지 않습니다. 이는 module.exports 가 가진 비정적 구조 때문입니다.