web-dev-qa-db-ja.com

nodejs 8インポートモジュール-必須またはインポート?

Node.js 8でモジュールをどのようにインポートするのか不思議です-まだrequireを使用していますか?

または、importを使用するために引き続きbabelが必要ですか?

私はあちこち探していましたが、答えはないようです。それでもrequireを使用する必要がある場合、なぜimportをまだノードに実装できないのですか?

36
laukok

UPDATE-2018.11.15↓

短い答え
まだ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構文を使用するためだけに作成するインセンティブはあまりありません。

実装の違いの詳細については、 この記事をご覧ください

37
kuzyn