您可能想require()
在模块中使用有几个原因。
但首先,请确保您请求引用正确的require
变量。在您的示例中,对的引用require
是全局. 您需要对require
范围为模块上下文的 a 的引用(有时称为“本地要求”)。这很简单:
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”)。(这是原因之一,curl.js 默认没有全局变量require
。)
使用本地的原因require
:
- 由于运行时条件,您不知道在构建时(或加载时)需要哪些模块
- 您明确希望将某些模块的加载推迟到需要它们时
- 您想根据特征检测的结果加载模块的变体(尽管类似 dojo 的“有!”插件可能是更好的解决方案(抱歉,链接躲避我))
require
最后,为了与 CommonJS Modules/1.1 中编写的模块兼容,AMD 定义了第二种用法,然后将其包装在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
调用来查找依赖项。