Node.jsでES Modulesがネイティブに動く時代なのです。
Working Code
// package.json { "type": "module", } // eptESM.js export const f1 = () => 1; // eptCJS.cjs const f2 = () => 2; module.exports = f2; // ipt.js import { f1 } from "./eptESM.js"; import f2 from "./eptCJS.cjs"; console.log(f1()); // 1 console.log(f2()); // 2
TypeScriptと組み合わせた時の注意点
拡張子がデフォルトだと必須なため import x from "./m.ts
になるんだけど、TSのコンパイラはコードに触らないデザインなので拡張子を変換してくれない(import x from "./m.js
に変換してくれない)
1つの選択肢は 「拡張子無しで書いてtscコンパイル -> --experimental-specifier-resolution=node
フラグを建ててNode.js実行」
Babelとかで良い感じにmodule resolutionしてもらうという手もありそうだけど調べてない.