문법 차이만 외운 사람인지, 정적/동적 로딩 모델·트리 쉐이킹·환경 호환까지 보고 _상황에 맞게 선택_할 수 있는 사람인지를 가른다.
CommonJS는 Node에서 출발한 모듈 시스템으로 require/module.exports를 쓰며 동기적·런타임 로드, 동적 require 가능, _값 복사_라는 특성을 갖는다. ES Module(ESM)은 표준 모듈 시스템으로 import/export 문법을 쓰고 _정적 구조_라 빌드 시점에 의존 그래프와 사용된 export를 분석할 수 있어 트리 쉐이킹에 유리하다. ESM은 라이브 바인딩이라 import한 값이 원본 변경을 반영한다. 그래서 CJS는 동적 환경에 유연하지만 번들 최적화에 약하고, ESM은 정적 분석·표준 호환에 강한 대신 Node와 브라우저 환경별 설정이 필요하다.
CJS 전용 패키지를 ESM 프로젝트에 끌어와 "named export가 안 들어온다"를 만난 적이 있다면 두 시스템 모델 차이로 자연스럽게 풀 수 있다
라이브러리를 dual-publish하면서 package.json exports를 설정한 적이 있다면 환경별 호환 기준이 답변 후크가 된다
트리 쉐이킹이 되도록 ESM 빌드만 분리해본 적이 있다면 정적 분석 이야기로 이어진다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.