Jsモジュール化導入導出
5198 ワード
Jsモジュール化導入導出
Common JSは、依存するモジュールについて、 を遅延して実行するように変更されてもよい. . は無理です. しかありません. を実行することができません. を必要としない.
CommonJs
、AMD
、CMD
、ES6
は、モジュール化定義において使用される仕様であり、モジュールの導入と処理モジュールとの間の依存関係を規範化し、命名衝突問題を解決するために、モジュール化方式を使用して複雑なシステムをコード構造に分解し、より合理的に維持可能な管理可能なモジュールである.Common JS
CommonJS
はNodeJs
サーバエンドモジュールの仕様であり、この仕様によれば、各ファイルはモジュールであり、自分の役割領域がある.一つのファイルで定義されている変数、関数、クラスはすべてプライベートです.他のファイルには見えません.CommonJS
仕様の規定により、各モジュールの内部、module
変数は現在のモジュールを表します.この変数はオブジェクトで、exports
属性は外部インターフェースです.モジュールをロードすると、モジュールexports
の属性がロードされます.つまり、CommonJS
仕様はrequire
によって導入され、module.exports
とexports
とが導き出される.// 1.js
var a = 1;
var b = function(){
console.log(a);
}
module.exports = {
a: a,
b: b
}
/*
//
module.exports = {
a,
b
}
*/
// 2.js
var m1 = require("./1.js")
console.log(m1.a); // 1
m1.b(); // 1
exports
を用いて導出しても良いが、exports
のポインタだけでexports
のメモリ領域、すなわちmodule.exports
を指し、書き換えexports = module.exports = {}
はポインタの向きを変えてモジュールを導き出すことができないので、簡単に言えばexports
は書き方のための簡単なスキームを提供している.最後はexports
を利用して導出される.また、1つのファイルでmodule.exports
とmodule.exports
を同時に使用すると、exports
の内容だけが導出される.// 1.js
var a = 1;
var b = function(){
console.log(a);
}
exports.a = a;
exports.b = b;
// exports = { a, b } // , exports module.exports
// 2.js
var m1 = require("./1.js")
console.log(m1.a); // 1
m1.b(); // 1
AMDmodule.exports
仕様はAMD
ではなく、AMD YES
非同期モジュール定義であり、全称AMD
仕様は、ブラウザ側のモジュール化ソリューションであり、Asynchronous Module Definition
規範導入モジュールは同期ローディングであり、これはサービス端末にとって問題ではない.そのモジュールはハードディスク上に記憶されているので、同期ローディングが完了するまで待つことができるができるが、ブラウザ内のモジュールはネットワークを通じてローディングされている.同期ブロッキングがモジュールのロードが完了すると、ブラウザページのフェイルアウトが発生する可能性があります.CommonJS
は、非同期的にモジュールをロードし、モジュールのロードは、後のステートメントの動作に影響を与えません.このモジュールに依存するすべてのステートメントは、1つのコールバック関数で定義されています.ロードが完了するまで、このコールバック関数は動作し、AMD
はRequireJS
仕様を実装しています.require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
// do something
});
define(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
// do something
return {};
});
/**
define require , define return ( ), define ;require return ,
*/
// html
// <script src="require.js" defer async="true" >
CMDAMD
共通モジュール定義は、CMD
が普及過程においてモジュール定義の規範化出力であり、ブラウザ側のモジュール化非同期解決策でもあり、SeaJS
とCMD
の違いは主に以下の通りである.AMD
は、事前に実行された(相対的に定義されたコールバック関数であり、AMD
キャリアは、事前にすべての依存性をロードし、実行を呼び出してからコールバック関数を実行する)AMD
は、遅延実行である.(相対的に定義されたコールバック関数は、CMD
キャリアは、すべての依存性をローディングした後にコールバック関数を実行し、依存モジュールが必要になったときにローディングの依存項を実行してコールバック関数に戻る)が、CMD
からRequireJS
は依存前置であり(モジュールを定義する際にその依存性を宣言するモジュール)、2.0
は依存近距離である(あるモジュールを使用するときだけ AMD
に行きます.必要に応じてロードします.すなわち、使用します.)define(function(require,exports,module){
var a = reuire('require.js');
a.dosomething();
return {};
});
ES 6CMD
は、言語標準レベルでモジュールの機能を実現したもので、ブラウザおよびサーバ共通のモジュールソリューションとなるためにrequire
とES6
を使用してモジュールを導出し、ES6
を使用してモジュールを導入する.また、ブラウザ環境でexport
を使用してexport default
、import
から導出されたモジュールを導入することができるが、依然として構築されている.require
標準導入モジュールを使用します.export
、export default
は主に以下の違いがあります.import
は必要に応じて導入できます.export
はexport default
は複数あってもいいです.export
は一つのexport default
は、直接変数式を導出することができ、export
はexport default
方式で導出され、導入時にexport
を追加し、export default
は// 1.js
var a = 1;
var b = function(){
console.log(a);
}
var c = 3;
var d = a + c;
var obj = { a,b,c }
export {a,b};
export {c,d};
export default obj;
ES6
import {a,b} from "./1.js"; // export
import m1 from "./1.js"; // {} export default
import {c} from "./1.js"; // export
console.log(a); // 1
console.log(b); // ƒ (){ console.log(a); }
console.log(m1); // {a: 1, c: 3, b: ƒ}
console.log(c); // 3
参照https://segmentfault.com/a/1190000010426778
https://www.cnblogs.com/leftJS/p/11073481.html
https://www.cnblogs.com/zhoulujun/p/9415407.html
https://www.cnblogs.com/zhoulujun/p/9415407.html
https://www.cnblogs.com/moxiaowohuwei/p/8692359.html