私が協力しているプロジェクトでは、使用できるモジュール システムに関して 2 つの選択肢があります。
- を使用してモジュールをインポートし
require
、およびを使用してエクスポートしmodule.exports
ますexports.foo
。 - モジュールをインポートするにはES6
import
、ES6を使用してエクスポートするexport
どちらか一方を使用することでパフォーマンス上の利点はありますか? Node.js モジュールではなく ES6 モジュールを使用する場合に知っておくべきことは他に何かありますか?
ベストアンサー1
アップデート
Node.js v12(2019年4月)以降、ESモジュールのサポートはデフォルトで有効になっており、Node.js v15(2020年10月)以降は安定しています(ここ)。Node.jsモジュールを含むファイルは、で終わるか.mjs
、最も近いpackage.json
ファイルに が含まれている必要があります"type": "module"
。Node.js ドキュメント相互運用性についてもさらに詳しい情報がありますコモンJSおよび ES モジュール。
パフォーマンスの面では、新しい機能が既存の機能ほど最適化されていない可能性は常にあります。ただし、モジュール ファイルは 1 回しか評価されないため、パフォーマンスの側面は無視できる可能性があります。結局のところ、明確な答えを得るにはベンチマークを実行する必要があります。
ES モジュールは、 関数を介して動的にロードできますimport()
。 とは異なりrequire
、これは promise を返します。
前の回答
どちらか一方を使用することで、パフォーマンス上の利点はありますか?
ES6モジュールをネイティブにサポートするJavaScriptエンジンはまだ存在しないことに注意してください。あなた自身が使用していると言っていましたがバベルいずれにせよ、 Babel は宣言をデフォルトで CommonJS ( / ) に変換しますimport
。export
そのrequire
ためmodule.exports
、ES6 モジュール構文を使用する場合でも、Node.js でコードを実行すると、内部的には CommonJS が使用されます。
CommonJSとES6のモジュールには技術的な違いがあります。例えば、CommonJSではモジュールを動的に読み込むことができます。ES6ではこれができません。しかし、そのためのAPIが開発中です。
ES6 モジュールは標準の一部なので、それを使用します。