たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

Node.jsでもimport/exportは動く

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してもらうという手もありそうだけど調べてない.