ECMAScript モジュール (ESM) は、Web でモジュールを使用するための仕様です。最新のブラウザですべてサポートされており、Web 用のモジュールコードを記述するための推奨方法です。
Webpack は、ECMAScript モジュールの処理と最適化をサポートしています。
export
キーワードを使用すると、ESMから他のモジュールに要素を公開できます。
export const CONSTANT = 42;
export let variable = 42;
// only reading is exposed
// it's not possible to modify the variable from outside
export function fun() {
console.log('fun');
}
export class C extends Super {
method() {
console.log('method');
}
}
let a, b, other;
export { a, b, other as c };
export default 1 + 2 + 3 + more();
import
キーワードを使用すると、他のモジュールからの参照をESMに取り込むことができます。
import { CONSTANT, variable } from './module.js';
// import "bindings" to exports from another module
// these bindings are live. The values are not copied,
// instead accessing "variable" will get the current value
// in the imported module
import * as module from './module.js';
module.fun();
// import the "namespace object" which contains all exports
import theDefaultValue from './module.js';
// shortcut to import the "default" export
デフォルトでは、webpack はファイルがESMか別のモジュールシステムかを自動的に検出します。
Node.js は、package.json
のプロパティを使用して、ファイルのモジュールタイプを明示的に設定する方法を確立しました。"type": "module"
をpackage.jsonに設定すると、このpackage.json以下のすべてのファイルがECMAScriptモジュールになります。代わりに"type": "commonjs"
を設定すると、CommonJSモジュールになります。
{
"type": "module"
}
それに加えて、ファイルは.mjs
または.cjs
拡張子を使用してモジュールタイプを設定できます。.mjs
はESMに、.cjs
はCommonJsに強制します。
text/javascript
またはapplication/javascript
MIMEタイプを使用するDataURIでも、モジュールタイプをESMに強制します。
モジュール形式に加えて、ESMとしてモジュールにフラグを付けることは、解決ロジック、相互運用ロジック、およびモジュールで使用可能なシンボルにも影響します。
ESMでのインポートは、より厳密に解決されます。相対的な要求には、fullySpecified=false
で動作が無効化されていない限り、ファイル名とファイル拡張子(例:*.js
または*.mjs
)を含める必要があります。
非ESMからは「default」エクスポートのみインポートできます。名前付きエクスポートは使用できません。
CommonJs構文は使用できません:require
、module
、exports
、__filename
、__dirname
。