requirejs 定义:嵌套依赖
requirejs define: nested dependency
我想定义A,但是A需要B,B需要C(为了r.js)
这两个是正确的吗?
define([
'module'
], function(module) {
require(['C'], function() {
require(['B'], function() {
var A;
return A;
});
});
});
require(['C'], function() {
require(['B'], function() {
define([
'module'
], function(module) {
var A;
return A;
});
});
});
只需将 deps 放在 define 块中,如下所示:
define(["module", "B", "C"], function(module){
var A;
return A;
});
如果您的模块 B
依赖于 C
那么您应该在 require.config
中配置它,如下所示
shim: {
"B": ["C"] // shorthand of "B": {deps: ["C"]}
}
您的选择都不正确。
您的首选尝试使用 return
到 return 来自异步回调的值。通常是不可能的,RequireJS 也不例外。请参阅 this question 及其答案以了解为什么会这样。
您的第二个选择是将 define
放入传递给 require
的回调中。这可能适用于某些玩具箱,但一般情况下这是行不通的。 ("toy case" 我的意思是所有条件都受到严格控制的概念验证。这种情况不能反映实际应用程序的真实情况。)
确实是您的选择:
define(["module", "B", "C"], function(module){
var A;
return A;
});
并且如果 B
依赖于 C
而不是 AMD 库,请为它添加一个 shim。在评论中,您反对说如果您这样做,您必须拥有 "hundreds" 个垫片。您有几个选项可以避免这些垫片:
不要使用 RequireJS 加载 C
。在 RequireJS 加载到您的页面之前用 script
元素加载它。
将您的应用程序设计为仅使用一个模块启动,并要求您的应用程序在加载 C
之前启动:
require(['C'], function () {
require(['main']);
});
main
将是启动您的应用程序的模块。这种方法的缺点是,如果你像我一样,最终,你会在你需要 main
.
之前忘记需要 C
我想定义A,但是A需要B,B需要C(为了r.js)
这两个是正确的吗?
define([
'module'
], function(module) {
require(['C'], function() {
require(['B'], function() {
var A;
return A;
});
});
});
require(['C'], function() {
require(['B'], function() {
define([
'module'
], function(module) {
var A;
return A;
});
});
});
只需将 deps 放在 define 块中,如下所示:
define(["module", "B", "C"], function(module){
var A;
return A;
});
如果您的模块 B
依赖于 C
那么您应该在 require.config
中配置它,如下所示
shim: {
"B": ["C"] // shorthand of "B": {deps: ["C"]}
}
您的选择都不正确。
您的首选尝试使用 return
到 return 来自异步回调的值。通常是不可能的,RequireJS 也不例外。请参阅 this question 及其答案以了解为什么会这样。
您的第二个选择是将 define
放入传递给 require
的回调中。这可能适用于某些玩具箱,但一般情况下这是行不通的。 ("toy case" 我的意思是所有条件都受到严格控制的概念验证。这种情况不能反映实际应用程序的真实情况。)
define(["module", "B", "C"], function(module){
var A;
return A;
});
并且如果 B
依赖于 C
而不是 AMD 库,请为它添加一个 shim。在评论中,您反对说如果您这样做,您必须拥有 "hundreds" 个垫片。您有几个选项可以避免这些垫片:
不要使用 RequireJS 加载
C
。在 RequireJS 加载到您的页面之前用script
元素加载它。将您的应用程序设计为仅使用一个模块启动,并要求您的应用程序在加载
C
之前启动:require(['C'], function () { require(['main']); });
main
将是启动您的应用程序的模块。这种方法的缺点是,如果你像我一样,最终,你会在你需要main
. 之前忘记需要
C