gpt4 book ai didi

RequireJS 模块相互引用

转载 作者:行者123 更新时间:2023-12-01 11:40:32 26 4
gpt4 key购买 nike

我正在使用 requirejs 加载正在构建的 Web 应用程序的多个模块,但我很难理解某些东西。我的主模块需要依赖关系,但其他定义的模块都以某种方式相互引用。所以假设'project/func'模块可以调用'project/save'模块中的保存函数。现在我的大部分代码都导致 undefined 出错。

通过在线阅读,我可能遇到了一种称为循环引用的东西??我不太确定。我想我需要知道我做错了什么以及我应该怎么做。我试图在下面举一个例子,主文件在其中一个模块中调用 Bootstrap 方法,但该模块在某个时候调用另一个模块。这只是一个小例子。真正的应用程序有更多的模块,如果有意义的话,它们都需要在彼此内部运行函数。

//main require
require(['jquery', 'jqueryui', 'project/save', 'project/funcs', 'project/spec'], function($, ui, proSave, proFunc, proSpec){
proFunc.bootstrap();
});

//project/save
define(function(){
var save = function(){
//do some save stuff here
}
return {
save: save
}
});

//project/funcs
define(['project/save'], function(proSave){
var funcs = {
bootstrap: function(){
//do some stuff
funcs.func1();
},
func1: function(){
//do some stuff and save
proSave.save();
}
}
return {
funcs: funcs
}
});

最佳答案

RequireJS 有 documentation关于解释如何处理它们的循环依赖:

If you define a circular dependency (a needs b and b needs a), then in this case when b's module function is called, it will get an undefined value for a. b can fetch a later after modules have been defined by using the require() method (be sure to specify require as a dependency so the right context is used to look up a):

//Inside b.js:
define(["require", "a"],
function(require, a) {
//"a" in this case will be null if a also asked for b,
//a circular dependency.
return function(title) {
return require("a").doSomething();
}
}
);

因此,您必须编写代码才能处理循环依赖中的模块定义最初未定义的事实。如何完成此操作的细节取决于应用程序的特定结构。

RequireJS 文档中的这些智慧之言非常值得关注:

Circular dependencies are rare, and usually a sign that you might want to rethink the design.

[重点添加。] 通常,如果模块 A 依赖于 B,而 B 依赖于 A,则需要从 A 或 B 中提取一个功能子集,然后将其移至模块 C 中,这将允许 A 依赖于 C而不是 B,并且 B 依赖于 C 而不是 A,并打破了循环依赖。为了每个使用此类代码的人,这是最好的选择。然后,在无法消除循环的极少数情况下,我在上面引用的文档会告诉您如何处理它。

关于RequireJS 模块相互引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com