モジュール解読
3789 ワード
カテゴリ
主に以下のいくつかのモジュール化案を紹介します. ES 6 Common JS AMD ES 6
紹介:ES 6は言語標準のレベルで、モジュール機能を実現しました.しかも、かなり簡単に実現しました.CommonJSとAMD規格に取って代わることができます.ブラウザとサーバー共通のモジュールソリューションになります.
特徴:は、コンパイル時にモジュールの依存関係を決定することができるように、できるだけ静的にしてください.また、入力と出力の変数は です. ES 6モジュールはオブジェクトではなく、 を定義した.このようなローディングは「コンパイル時ローディング」または静的ローディングと呼ばれ、すなわちES 6はコンパイル時にモジュールローディングを完了することができ、効率はCommunJSモジュールのローディング方式よりも高いです.もちろん、これはES 6モジュール自体を参照することができませんでした.対象ではないので です.コンパイル時にロードされ、静的解析が可能になる.
文法的規則 さらに、 に取り込むことができる. は、 と同じです. です.は、一般的にimport文を処理の方法の前に置くが、
import関数は、動的ローディングモジュールをサポートし、実行時の処理モジュールが利点であるが、動的ローディングは を失うことができない.は非同期をサポートし、必要に応じて をロードする.このとき、 をローディングするのと同じです.
ちょっと見たほうがいいです.
ES 6とCommon JSの違い Common JSモジュールが出力するのは値のコピーです.ES 6モジュールが出力するのは値の参照 です. Common JSモジュールは実行時にロードされ、ES 6モジュールはコンパイル時に出力インターフェース です.
Common JS Common JSのモジュールはスクリプトファイルです. id:モジュール名 export:出力インターフェース loaded:スクリプトが実行されたかどうか 再requireはスクリプトを実行しません.対応する結果とコピー値だけを取得します.ロード時 を実行します.文法 です.
AMD
asyncで始まる言葉には、一般的に非同期的な意味があります.node appiに多いです.ブラウザでモジュールをロードするのはこのような案を採用します. define定義モジュール を使用する.は、requireを使用してモジュールを使用し、処理ロジック非同期 を実行する.
モジュール化記事はhttps://es6.ruanyifeng.com/#d...を参照してください.
いくつかの問題必要に応じて をロードする. です.、node.jsでES 6を使用したモジュール化 循環ローディングはどのように処理しますか? ES 6はコンパイルする時モジュールを分析して、実行の文脈の中でVOを分析することに相当して、循環的にロードする時定義の方式を見て、変数の昇格していない普通はエラーを報告することを招きます. は、Common JSに対して、ループローディングの実行プロセスは以下の通りである. は他のモジュールをロードし、jsモジュールの実行権は新しいモジュール に変化する.サイクルプロセスは、ロードされたモジュールを繰り返して実行しません.キャッシュ結果のみを取得します.
ちなみにwebpackのはリサイクルがありますか?
主に以下のいくつかのモジュール化案を紹介します.
紹介:ES 6は言語標準のレベルで、モジュール機能を実現しました.しかも、かなり簡単に実現しました.CommonJSとAMD規格に取って代わることができます.ブラウザとサーバー共通のモジュールソリューションになります.
特徴:
export
コマンドで明示的に出力コードを指定し、import
コマンドで入力し、出力の対外インターフェース文法的規則
export
文が出力するインターフェースは、その対応する値が動的バインディング関係、すなわちこのインターフェースを通じて、モジュール内部のリアルタイムの値export
コマンドは、モジュールの最上階にある限り、モジュールの任意の位置に現れることができる.ブロックレベルのスコープ内にあると、エラーが発生します.export
コマンドの後に、大括弧を使用して、変数、匿名関数、名札関数を含む出力変数のセットを指定します.ここで間違った例を見てください.変数出力は//
function f() {}
export f;
//
export function f() {};
//
function f() {}
export {f};
importを見てくださいimport
コマンド入力の変数は読み取り専用です.その本質は入力インターフェースですが、導入対象は属性を変更することができても、推奨されないimport
コマンドは、アップグレード効果があり、モジュール全体のヘッダにアップグレードされ、最初に実行され、エラーが発生することもない.foo();
import { foo } from 'my_module';
3.import
は静的に実行されているので、式と変数は使用できません.これらは実行時にしか結果が得られない構文構造4.Babelトランスコードによって、CommonJSモジュールのrequire
コマンドとES 6モジュールのimport
コマンドは同じモジュールに記入できますが、それはしないほうがいいです.import
は静的解析段階で実行されるので、モジュールの中で最初に実行される5.モジュール全体のロードを実現する6.export default
を使用してデフォルト出力を指定し、対応するimport
文は大かっこを使用する必要がない.import関数
require
がちょっと見たほうがいいです.
async function main() {
const myModule = await import('./myModule.js');
const {export1, export2} = await import('./myModule.js');
const [module1, module2, module3] =
await Promise.all([
import('./module1.js'),
import('./module2.js'),
import('./module3.js'),
]);
}
main()
1.非同期ブロックを防止する2.import戻り値の解消ES 6とCommon JSの違い
Common JS
require
コマンドは、最初にスクリプトをロードすると、スクリプト全体を実行し、メモリ内にオブジェクトを生成し、オブジェクトは3つの属性に注目する.module.exports = value
またはexports.xxx = value
require(xxx)
、もし第三者モジュールであれば、xxxはモジュール名である.カスタムモジュールの場合、xxxはモジュールファイルパスAMD
asyncで始まる言葉には、一般的に非同期的な意味があります.node appiに多いです.ブラウザでモジュールをロードするのはこのような案を採用します.
モジュール化記事はhttps://es6.ruanyifeng.com/#d...を参照してください.
いくつかの問題
import { stat, exists, readFile } from 'fs';
ここにはモジュールだけが必要です.他はロードしません.これは必要に応じてどのように実装されますか?defer
とasync
の違いは