AMD、CMD、CommonJS仕様をどう理解すればいいですか?javascriptモジュール化ロード学習まとめ
6320 ワード
これはjavascriptモジュール化AMD、CMD、CommunJSの学習総括についてです.記録としても同じように3つの方法に疑問を持っている子供たちに、間違っているところや間違っているところがあります.
このデフォルトの読者は大体require、seajsの使い方(AMD、CMDの使い方)を知っていますので、文法を使っていません.
1、なぜ生まれましたか
この3つの仕様はいずれもjavascriptモジュール化のために作られたもので、いずれもいくつかのモジュールを使用するかまたは使用する予定の時にこのモジュールをロードして、大量のシステムの巨大な複雑なコードがよく組織と管理されます.モジュール化によって、コードを使って管理している間は混乱しないし、多くの人の協力も便利になりました.
2、それらの規範たち:
(1)、Common JS JavaScript生態圏を構築するという志を持っている組織です.全体のコミュニティはJavaScriptプログラムの移植性と交換性を高めることに力を尽くしています.
a group with a goal of building up the JavaScript ecosystem for web servers,desktop and command line aps and in the browser.
ターゲットがあるJavaScript生態系Webサーバグループを構築し、ブラウザとコマンドラインのアプリケーションとデスクトップを構築します.
この組織はいくつかの規範を制定しました. http://www.commonjs.org/)CommonJS Modules/1.0仕様を含め、私達が普段言っているcommonjs仕様はこれです.
「The Common JS API will fill that gap by defining API that handle many common aplication needs、ultimartely providing a standary as rich as sis of Python、Ruby and Java. ”--(出自 http://www.commonjs.org/)
したがって、Commmonjsはよりサーバー側の仕様に偏っています.Node.jsはこの仕様を採用しています.Common JS規格によると、個々のファイルはモジュールです.モジュールをロードするには、requireメソッドを使用して、ファイルを読み込み、実行し、最後にファイル内部のexporteオブジェクトに戻ります.
彼はまた、次のような場面で使えます. ,だから彼は明らかにサーバー側に偏っています.もちろんブラウザに使ってもいいです. Server-side JavaScript apple Command line tools Desktop GUI-basedアプリ Hyrid aplications(Titanium、Adobe AIR)
(2)、AMD仕様
Communjsはモジュール化の問題を解決し、ブラウザで使用できますが、Communjsは同期ローディングモジュールです.このモジュールを使うには、現在ローディングしています.このような同期機構はブラウザの中に問題があります.ローディングスピードとか(ビューア同期アップモジュールは性能、ユーザビリティ、デバッグ、クロスドメインアクセスなどの問題があります.).
ブラウザの特殊な状況を考慮して、この仕様は非同期ローディング依存モジュールを実現できます.それはAMD仕様です.AMDはCommunJSモジュールの中継バージョンとして使用できます.CommunJSが同期に使用されていない限り、requireを使用して呼び出されたCommon JSコードは回調風に変換できます.格のAMDモジュール搭載器(https://github.com/amdjs/amdjs-api/wiki/AMD-(%E 4%B 8%AD% E 6%96%E 7%89%88) (その話は)
簡単なCommonJS変換を使用したモジュール定義です.
AMD仕様を見てみますと、AMDは基本的にモジュールに依存していることを説明してから、これらのモジュールをプリロードします.実際には、これらの依存性を事前によく考えてください.
(3)、CMD
この問題に対してかどうかは分かりませんが、タオバオの玉伯大牛はseajsを作ってきました.この規範はCMD規格に準拠していると公言しています.そして、この規範の接続を与えました.(開けばdraftという文字があります.)この規格についてはご存知ですか?
AMDはRequireJSのモジュール定義のプロモーションプロセスにおける標準化出力である.
CMDはSeaJSがモジュール定義の標準化出力をプロモーション中に行うものです.
同様に、Common JS Modules/2.0規格もあります.BravoJSは普及過程でモジュール定義の規範化生産です.
まだたくさんあります.⋯
「
この仕様は実際にSeajsの普及のために作られたものです.SeaJSはどういうものですか?基本的にはこの仕様を知っています.
Seajsもプリロード依存jsとAMDの仕様はプリローディングと同じで、明らかに異なるところは呼び出しと宣言の依存性です.AMDとCMDはdifineとrequireを使用していますが、CMDは使用中に依存する傾向があります.コードを書かないでください.突然他のモジュールに依存する必要があります.それは現在のコードではreを使用します.quireを導入すればいいです.規範はあなたのためにプリロードを解決してくれます.自由に書いてもいいです.しかし、AMD標準は事前に頭のパラメータに依存する部分を書いておかなければなりません.(書いていませんか?逆で書いてください.)これは一番明らかな違いです.
3、共生共存
Common JSはサーバー側の仕様なので、他の2つの基準は実際には衝突しません.
AMDは海外でより多く使われています.もちろん国内でも多く使われています.jQuery 1,7バージョンから使用され始めました.Dojoは1.6バージョンで使用し始めました.これはもう十分な牛xであることを証明できます.
CMDはもちろん多くの人が使っていますが、基本的には国内に集中しています.Seajsの公式サイトでは、牛を大量に使っている会社が展示されています.http://seajs.org/docs/小さいものは有名ではないかもしれませんが、多くの企業がseajsを募集していますから.
ですから、三つの仕様は全部いいです.
ファイルを書くときは、様々なロード仕様に対応する必要がありますが、どうすればいいですか?下のコードを見てください.
4、AMDとCMDの違い
次のこれらの点はおじさんが知上で言ったのです.
1.依存モジュールに対して、AMDは
事前に実行し、CMDは
遅延実行です.しかし、RequireJSは2.0から遅延実行可能になりました.CMDはas lazy as possibleを推奨します.
2.CMDは信頼性が近く、AMDは前置依存を推奨する.
3.AMDのAPIのデフォルトは
一つは複数の場合、CMDのAPIは厳密に区別され、推奨されている.
タスクは単一です.たとえば、AMDでは、requireは大域requireと局部requireに分けられています.CMDでは、大域requireではなく、モジュールシステムの完全性によって、seajs.useを提供してモジュールシステムのロード開始を実現します.CMDでは、APIごとにすべてのAPIが開始されます.
シンプルで純粋です
4.まだ細かい差異がありますが、この仕様の定義を具体的に見ればいいです.
(はい、4時は多く言わないです......)
5、AMDとCMDのいくつかは同じです.
difineとrequireがあり、実際には依存パラメータを追加することができます.つまり、依存パラメータを提供する方法でプリロード依存モジュールを実現することができます. 注意:バンド
AMDはfactoryでrequireを使用しても良いですが、このモジュールは事前にロードされません.
var a. = require('a') //モジュールaをロード
不適切なところがあったら、斧を歓迎します.
参考資料:
http://wiki.commonjs.org/wiki/CommonJS
http://www.commonjs.org/
http://seajs.org/docs/
https://github.com/amdjs/amdjs-api/wiki/AMD
https://github.com/seajs/seajs/issues/269
https://github.com/seajs/seajs/issues/242
https://www.zhihu.com/question/20351507
http://blog.jobbole.com/49290/
http://www.cnblogs.com/qianshui/articles/4930892.html
http://blog.chinaunix.net/uid-26672038-id-4112229.html
このデフォルトの読者は大体require、seajsの使い方(AMD、CMDの使い方)を知っていますので、文法を使っていません.
1、なぜ生まれましたか
この3つの仕様はいずれもjavascriptモジュール化のために作られたもので、いずれもいくつかのモジュールを使用するかまたは使用する予定の時にこのモジュールをロードして、大量のシステムの巨大な複雑なコードがよく組織と管理されます.モジュール化によって、コードを使って管理している間は混乱しないし、多くの人の協力も便利になりました.
2、それらの規範たち:
(1)、Common JS JavaScript生態圏を構築するという志を持っている組織です.全体のコミュニティはJavaScriptプログラムの移植性と交換性を高めることに力を尽くしています.
a group with a goal of building up the JavaScript ecosystem for web servers,desktop and command line aps and in the browser.
ターゲットがあるJavaScript生態系Webサーバグループを構築し、ブラウザとコマンドラインのアプリケーションとデスクトップを構築します.
この組織はいくつかの規範を制定しました. http://www.commonjs.org/)CommonJS Modules/1.0仕様を含め、私達が普段言っているcommonjs仕様はこれです.
「The Common JS API will fill that gap by defining API that handle many common aplication needs、ultimartely providing a standary as rich as sis of Python、Ruby and Java. ”--(出自 http://www.commonjs.org/)
したがって、Commmonjsはよりサーバー側の仕様に偏っています.Node.jsはこの仕様を採用しています.Common JS規格によると、個々のファイルはモジュールです.モジュールをロードするには、requireメソッドを使用して、ファイルを読み込み、実行し、最後にファイル内部のexporteオブジェクトに戻ります.
彼はまた、次のような場面で使えます. ,だから彼は明らかにサーバー側に偏っています.もちろんブラウザに使ってもいいです.
(2)、AMD仕様
Communjsはモジュール化の問題を解決し、ブラウザで使用できますが、Communjsは同期ローディングモジュールです.このモジュールを使うには、現在ローディングしています.このような同期機構はブラウザの中に問題があります.ローディングスピードとか(ビューア同期アップモジュールは性能、ユーザビリティ、デバッグ、クロスドメインアクセスなどの問題があります.).
ブラウザの特殊な状況を考慮して、この仕様は非同期ローディング依存モジュールを実現できます.それはAMD仕様です.AMDはCommunJSモジュールの中継バージョンとして使用できます.CommunJSが同期に使用されていない限り、requireを使用して呼び出されたCommon JSコードは回調風に変換できます.格のAMDモジュール搭載器(https://github.com/amdjs/amdjs-api/wiki/AMD-(%E 4%B 8%AD% E 6%96%E 7%89%88) (その話は)
簡単なCommonJS変換を使用したモジュール定義です.
define(function (require, exports, module) { var a = require('a'), b = require('b'); exports.action = function () {}; });
AMDとCommunjsは互換性があります.呼出方法を少し変えたら同期ローディングができます.AMD仕様を見てみますと、AMDは基本的にモジュールに依存していることを説明してから、これらのモジュールをプリロードします.実際には、これらの依存性を事前によく考えてください.
(3)、CMD
この問題に対してかどうかは分かりませんが、タオバオの玉伯大牛はseajsを作ってきました.この規範はCMD規格に準拠していると公言しています.そして、この規範の接続を与えました.(開けばdraftという文字があります.)この規格についてはご存知ですか?
AMDはRequireJSのモジュール定義のプロモーションプロセスにおける標準化出力である.
CMDはSeaJSがモジュール定義の標準化出力をプロモーション中に行うものです.
同様に、Common JS Modules/2.0規格もあります.BravoJSは普及過程でモジュール定義の規範化生産です.
まだたくさんあります.⋯
「
この仕様は実際にSeajsの普及のために作られたものです.SeaJSはどういうものですか?基本的にはこの仕様を知っています.
Seajsもプリロード依存jsとAMDの仕様はプリローディングと同じで、明らかに異なるところは呼び出しと宣言の依存性です.AMDとCMDはdifineとrequireを使用していますが、CMDは使用中に依存する傾向があります.コードを書かないでください.突然他のモジュールに依存する必要があります.それは現在のコードではreを使用します.quireを導入すればいいです.規範はあなたのためにプリロードを解決してくれます.自由に書いてもいいです.しかし、AMD標準は事前に頭のパラメータに依存する部分を書いておかなければなりません.(書いていませんか?逆で書いてください.)これは一番明らかな違いです.
3、共生共存
Common JSはサーバー側の仕様なので、他の2つの基準は実際には衝突しません.
AMDは海外でより多く使われています.もちろん国内でも多く使われています.jQuery 1,7バージョンから使用され始めました.Dojoは1.6バージョンで使用し始めました.これはもう十分な牛xであることを証明できます.
CMDはもちろん多くの人が使っていますが、基本的には国内に集中しています.Seajsの公式サイトでは、牛を大量に使っている会社が展示されています.http://seajs.org/docs/小さいものは有名ではないかもしれませんが、多くの企業がseajsを募集していますから.
ですから、三つの仕様は全部いいです.
ファイルを書くときは、様々なロード仕様に対応する必要がありますが、どうすればいいですか?下のコードを見てください.
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['jquery', 'underscore'], factory);
} else if (typeof exports === 'object') {
// Node, CommonJS
module.exports = factory(require('jquery'), require('underscore'));
} else {
// (root window)
root.returnExports = factory(root.jQuery, root._);
}
}(this, function ($, _) {
//
function a(){}; // , ( )
function b(){}; // ,
function c(){}; // ,
//
return {
b: b,
c: c
}
}));
このコードは様々なロード仕様に対応できます.4、AMDとCMDの違い
次のこれらの点はおじさんが知上で言ったのです.
1.依存モジュールに対して、AMDは
事前に実行し、CMDは
遅延実行です.しかし、RequireJSは2.0から遅延実行可能になりました.CMDはas lazy as possibleを推奨します.
2.CMDは信頼性が近く、AMDは前置依存を推奨する.
3.AMDのAPIのデフォルトは
一つは複数の場合、CMDのAPIは厳密に区別され、推奨されている.
タスクは単一です.たとえば、AMDでは、requireは大域requireと局部requireに分けられています.CMDでは、大域requireではなく、モジュールシステムの完全性によって、seajs.useを提供してモジュールシステムのロード開始を実現します.CMDでは、APIごとにすべてのAPIが開始されます.
シンプルで純粋です
4.まだ細かい差異がありますが、この仕様の定義を具体的に見ればいいです.
(はい、4時は多く言わないです......)
5、AMDとCMDのいくつかは同じです.
difineとrequireがあり、実際には依存パラメータを追加することができます.つまり、依存パラメータを提供する方法でプリロード依存モジュールを実現することができます. 注意:バンド
id
和 deps
パラメータ define
使い方はCMD規格ではなく、 Modules/Transport 規範.---由来:https://github.com/seajs/seajs/issues/242を選択しますAMDはfactoryでrequireを使用しても良いですが、このモジュールは事前にロードされません.
var a. = require('a') //モジュールaをロード
不適切なところがあったら、斧を歓迎します.
参考資料:
http://wiki.commonjs.org/wiki/CommonJS
http://www.commonjs.org/
http://seajs.org/docs/
https://github.com/amdjs/amdjs-api/wiki/AMD
https://github.com/seajs/seajs/issues/269
https://github.com/seajs/seajs/issues/242
https://www.zhihu.com/question/20351507
http://blog.jobbole.com/49290/
http://www.cnblogs.com/qianshui/articles/4930892.html
http://blog.chinaunix.net/uid-26672038-id-4112229.html