Node.js 패키지 작성자: CJS와 ESM을 모두 지원하세요.

이 게시물에서는 자체 NPM 패키지를 작성할 때 CJS(CommonJS) 및 ESM(ECMAScript Modules) 모두에 대한 지원을 쉽게 추가하는 방법을 설명합니다.

이제 TypeScript는 대부분의 NPM 패키지 작성자가 선택하는 항목이므로 CJS와 ESM을 모두 "빌드 대상"으로 지원하는 것이 그 어느 때보다 쉬워졌습니다.

문제



ESM 출력과 관련하여 표준 TypeScript 컴파일러( tsc )는 여전히 약간 제한적입니다. 소스 코드 파일에 .ts를 사용하면 .mjs 파일을 출력할 수 없습니다. 이 제한에 대한 해결 방법이 있지만, 특히 릴리스를 생성할 NPM 패키지가 둘 이상 있는 단일 리포지토리에 있는 경우 특히 너무 많은 노력이 필요한 경우가 많습니다.

해결책


esbuild를 사용하여 .js.mjs 파일을 모두 생성하고 선언 파일( tsc )에 대해서만 .d.ts를 사용합니다.

모두 동일한 출력 디렉토리를 사용할 수 있습니다.

npm install --save-dev esbuild


CommonJS(CJS) 출력 생성:

npx esbuild --outdir=build --platform=node --format=cjs src/*.ts


ES 모듈(ESM) 출력 생성:

npx esbuild --out-extension:.js=.mjs --outdir=build --platform=node --format=esm src/*.ts


TypeScript 선언 파일 생성:

npx tsc


또는 esbuildtypescript API를 통해 이 3단계를 수행할 수 있습니다. See the full example using esbuild and typescript APIs .


마지막으로 package.json 의 경우 3개의 출력을 모두 결합할 수 있습니다.

  "main": "./build/index.js",
  "module": "./build/index.mjs",
  "typings": "./build/index.d.ts",


도움이 되었기를 바랍니다!

좋은 웹페이지 즐겨찾기