CommonJS
ES Modulesの世界観上ではcommonjsなソースファイルはmoduleではなくscriptとして扱われることに注意
module.exports
や exports
を使ってエクスポートする
mod.js// 同じ
module.exports.add = (x, y) => x + y;
module.exports = { add: (x, y) => x + y, };
exports.add = (x, y) => x + y;
exports
は module.exports
を参照している
exports.add = ...
はできるが exports = {add: ...}
すると参照先が変わって正常にエクスポートできない
参照を隠蔽しようとするとこういうことになるのでやめたほうがいいよ
require()
でインポートする
main.jsconst mod = require("./mod");
mod.add(42, 46);
拡張子 .js
は省略できる
ディレクトリ foo
を指定すると foo/index.js
を参照する
ES Modulesの import ""
と異なり require()
はどこでも書ける
ES Modulesの import()
と異なり require()
は同期的に読み込まれる
読み込んだモジュールをキャッシュするので、REPLで一回呼んだモジュールをあとで変更した場合はキャッシュを消す必要がある
require.cache[モジュールのフルパス]
に入っている
モジュールのフルパスは require.resolve(相対パス)
で得られる
ES Modulesとして見たときCommonJSモジュールはmoduleではなくscriptになるので
"use strict"
がないとstrictモードにならない