NodeのES6インポートはしばらくバグのようでした。--experimental-modules
フラグ、またはBabelの使用などのオプション-ただし、AFAIKES6モジュールはVanillaNode.jsではまだサポートされていません。
一方、ES6モジュールはすべての主要なブラウザーでサポートされています。
ブラウザがそれらを実装できたのに、Nodeが実装されていないのはなぜですか?
基本的に、2つの非常に異なるモジュールシステムを連携させる方法に要約されます。 CommonJS(CJS)モジュールは動的で同期的にロードされ、ESモジュールは静的で不変で非同期的にロードされます。しかし、Nodeエコシステムを壊したくはありません。つまり、ESモジュールからCJSモジュールをロードしたり、その逆もできるようにしたいのです。理想的には、ユーザーがパッケージのモジュールの種類を知る必要がないこと(現在、CJSモジュールからESモジュールを読み込むことはできません。新しい非同期読み込み機能が必要になります。)一部の人々は、両方の種類のモジュールでエクスポートを含むパッケージを公開できることも望んでいます。
ブラウザには以前はどのような種類のモジュールもなかったので、ESモジュールを何かと連携させる必要はありませんでした。彼らは単純な実装を行うことができます。
ブラウザーやNode=などのさまざまな環境にまたがるすべてのモジュールシステムは、いくつかのトリッキーなEdgeケースになるでしょう。--experimental-modules
フラグを使用しても、ノードのESモジュールの実装はブラウザーのブラウザーとほとんど同じです、まだ違いがあります。たとえば、ブラウザは完全なURLからのみロードしますが、Nodeはnode_modules
からパッケージ名のみでパッケージをロードします。