Node.js 8でモジュールをどのようにインポートするのか不思議です-まだrequire
を使用していますか?
または、import
を使用するために引き続きbabelが必要ですか?
私はあちこち探していましたが、答えはないようです。それでもrequireを使用する必要がある場合、なぜimport
をまだノードに実装できないのですか?
短い答え
まだrequire
を使用しています
長答
ESMローディングは、2017年9月にリリースされたノード8.5.0
に部分的に到達しました。そのため、しばらくの間、仕様の一部が実験的な機能として登場しました。APIドキュメントを参照してください ここ 。警告には、--experimental-modules
フラグの必要性と、モジュールの新しい.mjs
拡張機能の使用が含まれます。
ESMの読み込みが安定して完全に機能する前にV8で発生する必要がある変更がまだあるため、元の回答と同様に、CommonJS require
に固執することをお勧めします'すでに他のものにバベルを使用していない
これを参照してください post より教訓的な説明については
2つの実装は内部では完全に異なるため、目に見えるものよりも多くのことがあります
重要な点は、仕様に関していまだに長引く問題/疑問があり(V8まで)、そのため、import
は現在、トランスパイラーを使用せずにNodeに実装できないことです。
投稿者 のいずれかからのこのコメント(2017年2月付け)を参照してください。
現時点では、Node.jsがES6モジュールのサポート可能な実装の作業を開始する前に、ES6および仮想マシン側で発生する必要のある仕様および実装の問題がまだいくつかあります。作業は進行中ですが、しばらく時間がかかります—現在、少なくとも1年程度を見ています。
トランスパイラーはES6モジュールの構文をCommonJSモジュールの構文に変換するだけなので、現在のところパフォーマンス上の利点はありません。言い換えると、バベルパイプラインがまだない場合は、積極的な構文の観点を除いて、新しく提案されたimport
構文を使用するためだけに作成するインセンティブはあまりありません。
実装の違いの詳細については、 この記事をご覧ください