本記事では、Node.jsでWarning: To load an ES module, set “type”: “module” in the package.json or use the .mjs extension.のエラーが返された時の原因と対処法について解説しています。
Node.js / Expressの学習におすすめ参考書
Node.js超入門 第3版
綺麗なコードが書けるようになる!
リーダブルコード-より良いコードを書くためのシンプルで実践的なテクニック
原因と対処法
このエラーが出る原因は、Node.jsでimportやexportなどのES moduleの記述をしているためです。今ではNode.jsでES moduleは当たり前に使われていますが元々はCommomJSです。
もし、CommomJSではなくES moduleの記述をしたい場合は「拡張子の変更」または「package.jsonの設定追加」のどちらかを設定をする必要があります。それぞれ詳しく見ていきましょう。
対処法①:拡張子の変更
対処法の一つ目は、拡張子を.js→.mjsに変更します。
実際に拡張子を.mjsに変更して動作するか確認してみましょう。
export const plusFn = (num1, num2) => num1 + num2;
import { plusFn } from "./plusFn.mjs";
const result = plusFn(10, 20);
console.log(result);
node .\main.mjs
> 30
エラーが出力されずに実行結果が返されていることが確認できました。
対処法②:package.jsonの設定追加
対処法の二つ目は、package.jsonファイルの設定に「“type”: “module”」を追加します。
{
"type": "module",
}
実際に拡張子を.mjsに変更して動作するか確認してみましょう。jsファイルの内容は対処法①と同じためnodeコマンド実行時の結果のみ掲載しています。
node .\main.mjs
> 30
エラーが出力されずに実行結果が返されていることが確認できました。