Node.js 모듈시스템과 CJS, ESM
Node.js 모듈 시스템이란?
모듈: 분리된 파일 각각, 클래스 하나 혹은 라이브러리 하나
필요한 모듈을 불러오고 내보낼 때의 모듈을 구성하는 방법이다.
Node.js에서는 CJS, ESM 두 가지가 존재한다.
CJS, ESM의 특징과 호환성
모듈 결정
아래 방식이 대표적이고 자세한 부분은 공식문서에서도 확인할 수 있다.(공식문서)
확장자
cjs(ts v4.7부터 cts): CJSmjs(ts v4.7부터 mts): ESM
package.json의 type 필드
type = commonjs: CJStype = module: ESM
CommonJS (CJS)
require/module.exportsmodule loader가 동기적으로 동작
ECMAScript Modules (ESM)
import/exportmodule loader가 Top-level Await 지원으로 비동기적으로 동작
ESM과 CJS 함께 지원
진입점(cjs/index.js, esm/index.js) 파일 구성
각 모듈 방식에 따라 컴파일
package.json의 exports 필드를 통해 모듈별 패키지 entry point 지정
파일 시스템 상의 위치와 import path를 다르게 가져갈 수 있다.
트러블 슈팅
Typescript 지원
CJS
ESM
경로는 상대 경로로 작성
References
Last updated