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モジュールは動的参照であり、 commonjsの最上階のthisはこのモジュール自体を指し、ES 6のトップレベルのthisはundefinedを指す. 次いで、comonjsのいくつかのトップレベル変数は、ES 6には存在しない:
commmonjsとES 6のmoduleはやはり大きな違いがあります.
import
を使用して一つのモジュールから変数をロードする場合(import foo from 'foo'
)、それらの変数はキャッシュされず、ロードされたモジュールへの参照となり、開発者自身が保証し、本当に値を取るときに値を取ることができる.arguments
require
module
exports
__filename
__dirname