バージョン 8.5.0 以降、Node.js はネイティブ ES モジュールをサポートし、コマンド ライン オプションで有効にすることができます。新機能は主に Bradley Farias によるものです。この記事では、Node.js でのネイティブ ES モジュール メソッドの解析の使用方法を主に紹介し、必要な方は参考にしていただければ幸いです。 。
1. デモ
この例のコード ディレクトリ構造は次のとおりです。 reee
デモを実行する:esm-demo/ lib.mjs main.mjs
2. チェックリスト: 注意事項
·
モジュールを動的にインポートすることはできません。ただし、動的 import() の作業は進行中であり、すぐにサポートが利用可能になる予定です。·__dirname や __filename などのメタ変数はありません。ただし、同様の関数「import.meta」が提案されています。次のようになります:
export function add(x, y) { return x + y; }
現在、すべてのモジュール識別子は URL です (この部分は Node.js の新機能です):
File - ファイル拡張子付きの相対パス: ../util /tools.mjs
・
library - ファイル拡張子もパスもありません lodash
・
npm ライブラリをブラウザでも利用できるようにする方法 (bundler を使用せずに) はまだわかりません。 1 つの可能性は、パスを実際のパスにマップする RequireJS スタイルの構成データを導入することです。現在、ブラウザでベア パス モジュール識別子を使用することは違法です。
CJS モジュールとの相互運用性
CJS モジュールをインポートできますが、常にデフォルトのエクスポート (module.exports の値) のみが存在します。 CJS モジュールで名前付きエクスポートをサポートすることはすでに取り組んでいますが、しばらく時間がかかる可能性があります。あなたが助けることができるなら、あなたはそれをすることができます。
import {add} from './lib.mjs'; console.log('Result: '+add(2, 3));
·
パス解決の動作が若干異なります: ESM は NODE_PATH と require.extensions をサポートしません。また、その識別子が常に URL であるという事実により、若干の違いが生じます。
·
ES モジュールは常に非同期でロードされるため、Web との互換性が最大限に確保されます。この読み込みスタイルを、require() による CJS モジュールの同期読み込みと混合することはできません。
·
同期モジュールの読み込みを無効にすると、ES モジュールのトップレベル待機インポート用のフォールバック パスも残ります (現在検討中の機能)。
3. 以前のバージョンの Node.js の ES モジュール
8.5.0 より前の Node.js バージョンで ES モジュールを使用したい場合は、John-David Dalton による @std/esm を参照してください。
よくある質問
コマンド ライン オプションなしで ES モジュールを使用できるのはいつですか?
さらなる読書
·
「トランスパイルされた ES モジュールの仕様準拠の強化」 [ES モジュールをネイティブに使用するか、Babel 経由でトランスパイルするか]
「モジュール指定子: ES モジュールの新機能?」 [なぜ .mjs なのか? モジュール指定子はどのように解決されるのですか? など]
「モジュール」[ES モジュールの詳細な章] 「ES6 の探索」]
今後の ECMAScript 提案:
·ブログ: "ES 提案: import() – ES モジュールの動的インポート"
·提案: "import.meta"
関連推奨事項:
ES6のブロックレベルスコープの詳細説明
ES6テンプレート文字列の例共有
以上がNode.js でネイティブ ES モジュールを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。