ホームページ  >  記事  >  ウェブフロントエンド  >  es モジュールはノードで実行できますか?

es モジュールはノードで実行できますか?

WBOY
WBOYオリジナル
2022-07-04 17:08:211678ブラウズ

es モジュールはノードで実行できます。ノードはバージョン 8.5.2 からネイティブ es モジュールをサポートしています。この機能は、コマンド ライン オプションを通じてオンにできます。es モジュール (ECMAScript モジュールとも呼ばれます)は JavaScript コードの再利用メカニズムですが、require() は es モジュールでは使用できません。

es モジュールはノードで実行できますか?

この記事の動作環境: Windows 10 システム、nodejs バージョン 12.19.0、Dell G3 コンピューター。

es モジュールはノードで実行できます

バージョン 8.5.0 以降、Node.js はネイティブ ES モジュールのサポートを開始し、この機能はコマンド ライン オプションを通じてオンにできます。新機能は主に Bradley Farias によるものです。

1. デモ

この例のコード ディレクトリ構造は次のとおりです:

esm-demo/
 lib.mjs
 main.mjs

lib.mjs:

export function add(x, y) {
 return x + y;
}

main.mjs:

import {add} from './lib.mjs';
console.log('Result: '+add(2, 3));

デモを実行する:

$ node --experimental-modules main.mjs
Result: 5

2. チェックリスト: 注意すべき事項

ES モジュール:

·モジュールを動的にインポートすることはできません。ただし、動的 ​​import() の作業は進行中であり、すぐにサポートが利用可能になる予定です。

·__dirname や __filename などのメタ変数はありません。ただし、同様の関数「import.meta」が提案されています。次のようになります:

console.log(import.meta.url);

· すべてのモジュール識別子が URL になりました (この部分は Node.js の新機能です) :

·ファイル - ファイル拡張子付きの相対パス: ../util/tools.mjs

·ライブラリ - ファイル拡張子なし、パスなし lodash

· npm ライブラリをより適切に利用できるようにする方法(バンドラーを使用しない) ブラウザーでの動作はまだわかりません。 1 つの可能性は、パスを実際のパスにマップする RequireJS スタイルの構成データを導入することです。現在、ブラウザでベア パス モジュール識別子を使用することは違法です。

CJS モジュールとの相互運用性

CJS モジュールをインポートできますが、常にデフォルトのエクスポート (つまり module.exports の値) のみが含まれます。 CJS モジュールで名前付きエクスポートをサポートすることはすでに取り組んでいますが、しばらく時間がかかる可能性があります。あなたが助けることができるなら、あなたはそれをすることができます。

import fs1 from 'fs';
console.log(Object.keys(fs1).length); // 86
import * as fs2 from 'fs';
console.log(Object.keys(fs2)); // ['default']

· ES モジュールでは require() を使用できません。主な理由は次のとおりです。

· パス解決の動作が若干異なります。ESM は NODE_PATH と require.extensions をサポートしません。また、その識別子が常に URL であるという事実により、いくつかのわずかな違いが生じます。

· ES モジュールは常に非同期でロードされるため、Web との互換性が最大限に確保されます。この読み込みスタイルを、require() による CJS モジュールの同期読み込みと混合することはできません。

· 同期モジュールの読み込みを無効にすると、ES モジュールのトップレベル待機インポート用のフォールバック パスも残ります (現在検討中の機能)。

推奨学習: 「nodejs ビデオ チュートリアル

以上がes モジュールはノードで実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。