ECMAScript Module Support in Node.js
TL;DR
TS4.5の時点ではNode.js ESMはNightly Buildでの実験的機能だったが、4.7で晴れてStableになった。
tsconfig.jsonのmodule指定が node12
から node16
に変わる。
node16
"module": "node16"
Top Level Awaitが使用できる。
import / exportがそのままJSに出力される。
requireやmoduleは使用できない。
exportsで
.mjs/.d.mts
.cjs/.d.cts
が出し分けできる。
commonjs
"module": "commonjs"
require / module.exports = に変換される。
package.jsonのexports
出力ファイルがESM/CommonJSどちらからも読み込めるよう、詳細な指定を記述できるようになった。
従来の types
main
よりも優先される。
exports: {
".": {
require: {
types: "./lib/index.d.cts",
default: "./lib/index.cjs",
},
import: {
types: "./lib/index.d.mts",
default: "./lib/index.mjs",
}
}
},
types: "./types/index.d.ts", // Fall-back for older versions
main: "./lib/index.cjs", // Fall-back for older versions
Last updated