[解決済み] CommonJSとAMDとRequireJSの関係?
質問
について、まだ非常に迷っています。 CommonJS、AMD と RequireJS を、たくさん読んでも。
知っているのは コモンJS (以前は サーバーJS ) を定義するためのグループです。 JavaScript の仕様(モジュールなど)を、ブラウザの外側で使用することを想定しています。 コモンJS モジュール仕様には、以下のような実装があります。 ノードジス または リンゴJS ということですね。
<ブロッククオートとはどのような関係なのでしょうか? コモンJS , 非同期モジュール定義 (AMD)と RequireJS ?
は RequireJS の実装です。 共通JS モジュール定義?もしそうなら AMD ということですか?
解決方法は?
RequireJS が実装されています。 AMD API (ソース) .
コモンJS
は、モジュールの定義方法として
exports
オブジェクトを作成し、モジュールの内容を定義します。簡単に言うと、CommonJSの実装は次のようになります。
// someModule.js
exports.doSomething = function() { return "foo"; };
//otherModule.js
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
基本的にCommonJSの仕様では、このように
require()
関数で依存関係を取得し
exports
変数でモジュールの内容をエクスポートし、モジュール識別子 (このモジュールに対する当該モジュールの位置を表すもの) を使って依存関係を要求します (
ソース
). CommonJSには、以下のような様々な実装があります。
ノードジス
というお話がありました。
CommonJSは特にブラウザを意識して設計されたわけではないので、ブラウザ環境にはあまりフィットしません(※これについては本当にソースがありません。 RequireJSのサイトです。 ) どうやら、これは非同期読み込みなどと関係があるようです。
一方、RequireJSでは、ブラウザの環境に合わせたAMDを実装しています(
ソース
). どうやら、AMDはCommonJS Transportフォーマットのスピンオフとして始まり、独自のモジュール定義APIに発展したようだ。それゆえ、この2つの間には類似性がある。AMDの新機能は
define()
関数を使用すると、モジュールがロードされる前にその依存関係を宣言することができます。例えば、次のような定義が考えられる。
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
つまり、CommonJSとAMDは ジャバスクリプト モジュール定義APIは、実装は異なるが、どちらも同じ起源を持つ。
- AMD は、モジュールの依存関係の非同期読み込みをサポートしているため、よりブラウザに適しています。
- RequireJS の実装です。 AMD の精神を保ちつつ、同時に コモンJS (主にモジュール識別子において)。
さらに混乱させるのは、RequireJSはAMDの実装でありながら、CommonJSラッパーを提供しているので、CommonJSモジュールをほぼ直接インポートしてRequireJSで使用することができることです。
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
関連
-
vue ディレクティブ v-html と v-text
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] Bowerとnpmの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
JavaScriptのStringに関する共通メソッド
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。
-
[解決済み] NPM vs. Bower vs. Browserify vs. Gulp vs. Grunt vs. Webpack [終了しました]。