require()
モジュールで 使用する理由はいくつかあります。
ただし、最初に、正しいrequire
変数への参照を要求していることを確認してください。あなたの例では、への参照require
はグローバルです。モジュールのコンテキストをスコープとする への参照がrequire
必要です (「ローカルの require」と呼ばれることもあります)。かんたんだよ:
define(["a", "b", "c", "require"], function(i, ii, iii, require){
require(["d", "e", "f"], function(moduleD, moduleE, moduleF) {
// do some stuff with these require()'d dependencies
})
/* rest of the code for this module */
});
これが重要な主な理由は、相対モジュール ID (「./peerModule」や「../unclePath/cousinModule」など) が正しく解決されるようにするためです。require
(これが理由の 1 つです。curl.js にはデフォルトでグローバルがありません。)
local を使用する理由require
:
- 実行時の条件により、ビルド時 (またはロード時) に必要なモジュールがわからない
- 一部のモジュールのロードを、必要になるまで明示的に延期したい場合
- 機能検出の結果に基づいてモジュールのバリエーションをロードしたい (ただし、dojo の「has!」プラグインのようなものがより良い解決策かもしれません (申し訳ありませんが、私を逃れるリンク))
最後に、AMD はrequire
、CommonJS Modules/1.1 で作成されたモジュールとの互換性のために、define
. これらは次のようになります。
define(function(require, exports, module){
var a = require("pkgZ/moduleA"), // dependency
b = require("pkgZ/moduleB"); // dependency
/* rest of the code for this module */
});
サーバー側の JavaScript 開発者は、この形式が魅力的であると感じるかもしれません。:)
一部の AMD ローダー (RequireJS 0.2+、dojo 1.7+、bdLoad、curl.js 0.6+ など) は、このハイブリッド AMD/CJSM1.1 形式を検出し、モジュールのrequire
呼び出しをスキャンして依存関係を見つけます。