eug*_*ene 2 javascript requirejs
我想定义 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;
});
});
});
Run Code Online (Sandbox Code Playgroud)
你的选择都不对。
您的首选尝试使用return从异步回调返回值。这通常是不可能的,RequireJS 也不例外。请参阅此问题及其答案,了解为什么会这样。
您的第二个选择将 adefine放入传递给 的回调中require。这可能适用于某些玩具箱,但一般来说这是行不通的。(“玩具箱”是指所有条件都受到严格控制的概念验证。这种情况并不能反映实际应用的现实。)
Linh Pham 的建议确实是您的选择:
define(["module", "B", "C"], function(module){
var A;
return A;
});
Run Code Online (Sandbox Code Playgroud)
如果B取决于C并且不是 AMD 库,请为其添加垫片。在评论中,您反对说如果您这样做,您必须拥有“数百个”垫片。您有几个选项可以避免这些垫片:
不要C用 RequireJS加载。script在页面上加载 RequireJS 之前使用元素加载它。
将您的应用程序设计为仅使用一个模块启动,并要求您的应用程序通过C在其他任何事情之前加载来启动:
require(['C'], function () {
require(['main']);
});
Run Code Online (Sandbox Code Playgroud)
main将是启动您的应用程序的模块。这种方法的缺点是,如果你和我一样,最终你会在 requireC之前忘记require main。