CommunJsとes 6のModuleの違い

1398 ワード

歴史上、jsはモジュールシステムがないので、一つの項目を複数のモジュールファイルに分割することはできません.この状況に対して、コミュニティにはいくつかの統一的な規範が現れました.後者はブラウザ向けです.ES 6は言語標準レベルでモジュール機能を実現し、実現も簡単です.Common JsとAMDに取って代わることができます.前後のjsのモジュールスタイルの統一を達成します.しかし、まだこの目的は完全に達成されていません.nodejsはまだCommonJS仕様を採用しています.しかし、v 13.2バージョンでは、nodejsはES 6モジュール文法を実現しています.まだ正式に代替されていません.v 13.2バージョンは、jsファイルを.mjsで終了し、nodejsはES 6モジュールと見なします.で.cjsで終わるとCommunJSモジュールと見なされます.パッケージのpackage.jsonファイルに「type」「module」情報を追加することもできます.nodejsはパッケージ全体をES 6モジュールとして認識して実行をロードします.
commmonjsとES 6のmoduleはやはり大きな違いがあります.
  • の両方のモジュール導入導出文法は違っています.comonjsはmodule.export、export導出、require導入です.ES 6はexportがエクスポートし、importが導入します.
  • comonjsは実行時にモジュールをロードし、ES 6は静的コンパイルの間にモジュールの依存性を決定する.
  • ES 6はコンパイルの間にすべてのimportをトップに引き上げます.common jsはrequireを向上させません.
  • comonjsから導出されたのは1つの値コピーであり、ローディング結果はキャッシュされ、内部でこの値が修正されると外部に同期されない.ES 6はエクスポートされた参照であり、内部修正は外部に同期することができる.
  • の両者の循環導入の実現原理は違っていますが、comonjsは、モジュールが循環ローディングに遭遇したときに、現在実行されている部分の値を返します.コードが全部実行された後の値ではなく、両者に違いがあるかもしれません.ですから、変数を入力する時は、非常に注意しなければなりません.ES 6モジュールは動的参照であり、importを使用して一つのモジュールから変数をロードする場合(import foo from 'foo')、それらの変数はキャッシュされず、ロードされたモジュールへの参照となり、開発者自身が保証し、本当に値を取るときに値を取ることができる.
  • commonjsの最上階のthisはこのモジュール自体を指し、ES 6のトップレベルのthisはundefinedを指す.
  • 次いで、comonjsのいくつかのトップレベル変数は、ES 6には存在しない:
  • arguments
    require
    module
    exports
    __filename
    __dirname