[解決済み】Node.jsのrequireとES6のimport/exportを使い分ける。
質問
私が共同研究しているプロジェクトで、どのモジュールシステムを使うか、2つの選択肢があります。
-
を使用してモジュールをインポートします。
require
を使用し、エクスポートはmodule.exports
とexports.foo
. -
ES6を使ったモジュールのインポート
import
およびES6を使用したエクスポートexport
一方を使用することでパフォーマンス上の利点はありますか?また、NodeのモジュールではなくES6のモジュールを使用する場合、他に知っておくべきことはありますか?
どのように解決するのですか?
更新情報
Node v12(2019年4月)以降、ESモジュールのサポートがデフォルトで有効になり、Node v15(2020年10月)以降、安定しています(参考:Node v15
こちら
). ノードモジュールを含むファイルの末尾は
.mjs
または最も近い
package.json
ファイルには
"type": "module"
. その
ノードのドキュメント
には、CommonJSとESモジュールの相互運用に関する、より多くの情報があります。
パフォーマンス面では、新しい機能が既存の機能ほど最適化されていない可能性が常にあります。しかし、モジュールファイルは一度しか評価されないので、パフォーマンス面はおそらく無視できます。結局のところ、いずれにせよ明確な答えを得るためには、ベンチマークを実行する必要があるのです。
ESモジュールは
import()
関数を使用します。とは異なり
require
これはプロミスを返します。
前回の回答
<ブロッククオート一方を使用することでパフォーマンス上の利点はありますか?
ES6モジュールをネイティブにサポートするJavaScriptエンジンがまだ存在しないことを念頭に置いてください。Babelを使用しているとご自身でおっしゃっていましたね。Babelは以下のように変換します。
import
と
export
の宣言を CommonJS (
require
/
module.exports
) をデフォルトで使用します。ですから、たとえES6モジュール構文を使ったとしても、Nodeでコードを実行すれば、ボンネットの下でCommonJSを使うことになります。
CommonJSとES6モジュールには技術的な違いがあり、例えばCommonJSではモジュールを動的にロードすることができます。ES6ではこれができない。 しかし、そのためのAPIが開発されています .
ES6モジュールは標準の一部なので、私ならそれを使いますね。
関連
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] ES6インポートで中括弧を使用するのはどのような場合ですか?
-
[解決済み] "require(x)" と "import x" の違いについて
-
[解決済み】インデックスファイルでのES6エクスポート/インポート機能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み】Vueが定義されていない
-
[解決済み] "require(x)" と "import x" の違いについて
-
[解決済み】SyntaxError: モジュール外部でimport文を使用できない
-
[解決済み】Reactでローカルの画像を参照するにはどうすればいいですか?