なぜ MJS を JS に変換するのですか?
明示的な ES モジュール拡張子を廃止してプロジェクトの package.json にモジュールシステムを決定させたい場合や、古い Node バージョンやツールが ESM なしでロードできる CommonJS 出力を提供したい場合に、.mjs を通常の .js に変換します。
MJS から JS への変換方法
リネームと package.json の type 設定 EASIEST
ファイル名を .js に変更し、package.json に "type": "module" を追加して、Node が引き続き ES モジュールとして扱うようにします。
Babel OPEN-SOURCE
@babel/plugin-transform-modules-commonjs(または @babel/preset-env)をインストールし、babel file.mjs --out-file file.js を実行して import/export を CommonJS の require/module.exports に書き換えます。
esbuild OPEN-SOURCE
esbuild file.mjs --format=cjs --platform=node --outfile=file.js を実行して、ES モジュールから CommonJS の .js バンドルを生成します。
Visual Studio Code FREE
VS Code で .mjs を開き、名前を .js に変更します。小さなファイルであれば、エディタを使用して手動で import/export ステートメントを変換します。
これらの形式について
An .mjs file is JavaScript source code that Node.js treats as an ECMAScript module, meaning it uses import and export instead of CommonJS require. The extension exists so Node can tell ES…
.MJS の詳細を開く →JSファイルはJavaScriptのソースコードファイルです。これは、Node.jsを介してウェブページのインタラクティブ性やサーバーサイドアプリを動かす、プレーンで読み取り可能なテキストです。VS…
.JS の詳細を開く →品質と注意点
- リネームしただけではコードは変わりません。
package.jsonが"type": "module"に設定されていない場合、.jsファイル内の ESM 構文はSyntaxErrorをスローします。 - CommonJS へのトランスパイルは
import/exportをrequire/module.exportsに変更し、トップレベルのawaitやimport.metaの動作を変える可能性があります。 - esbuild のようなバンドラーは依存関係をインライン化し、コメントを削除する場合があるため、出力される
.jsはソースの完全なコピーにはなりません。
よくある質問
`.mjs` は `.js` と同じですか?
.mjs は常に ES モジュールを意味しますが、.js は package.json の設定に従います(デフォルトは CommonJS、"type": "module" があれば ESM)。単に `.mjs` を `.js` にリネームしてもいいですか?
package.json に "type": "module" がある場合のみです。そうでない場合、Node は .js を CommonJS として扱い、ESM 構文はエラーになります。リネーム後も ESM を維持するにはどうすればよいですか?
package.json に "type": "module" を追加するか、.mjs 拡張子を使用します。どちらも Node に対してファイルを ES モジュールとして解析するよう指示します。