web-dev-qa-db-ja.com

Node用のES6モジュールについてそれほど難しいことは何ですか?

NodeのES6インポートはしばらくバグのようでした。--experimental-modulesフラグ、またはBabelの使用などのオプション-ただし、AFAIKES6モジュールはVanillaNode.jsではまだサポートされていません。

一方、ES6モジュールはすべての主要なブラウザーでサポートされています。

ブラウザがそれらを実装できたのに、Nodeが実装されていないのはなぜですか?

1
dwjohnston

基本的に、2つの非常に異なるモジュールシステムを連携させる方法に要約されます。 CommonJS(CJS)モジュールは動的で同期的にロードされ、ESモジュールは静的で不変で非同期的にロードされます。しかし、Nodeエコシステムを壊したくはありません。つまり、ESモジュールからCJSモジュールをロードしたり、その逆もできるようにしたいのです。理想的には、ユーザーがパッケージのモジュールの種類を知る必要がないこと(現在、CJSモジュールからESモジュールを読み込むことはできません。新しい非同期読み込み機能が必要になります。)一部の人々は、両方の種類のモジュールでエクスポートを含むパッケージを公開できることも望んでいます。

ブラウザには以前はどのような種類のモジュールもなかったので、ESモジュールを何かと連携させる必要はありませんでした。彼らは単純な実装を行うことができます。

ブラウザーやNode=などのさまざまな環境にまたがるすべてのモジュールシステムは、いくつかのトリッキーなEdgeケースになるでしょう。--experimental-modulesフラグを使用しても、ノードのESモジュールの実装はブラウザーのブラウザーとほとんど同じです、まだ違いがあります。たとえば、ブラウザは完全なURLからのみロードしますが、Nodeはnode_modulesからパッケージ名のみでパッケージをロードします。

5
curiousdannii