RequireJS依赖项随机失败:“;尚未加载上下文“的模块”;,莫名其妙

RequireJS依赖项随机失败:“;尚未加载上下文“的模块”;,莫名其妙,requirejs,Requirejs,我遇到了一个关于RequireJS的问题,在经过一段长时间(大约一年)的良好工作后,它在不同的领域一次又一次地随机出现 我声明我的requireJS文件如下: define(['TestController'],函数(TestController) { 返回{ oneFunction:函数(回调) { //当我尝试在这里使用“TestController”时,我得到 //错误:模块名“TestController”未被删除 //尚未加载上下文“错误…”。。。 TestController.tes

我遇到了一个关于RequireJS的问题,在经过一段长时间(大约一年)的良好工作后,它在不同的领域一次又一次地随机出现

我声明我的requireJS文件如下:

define(['TestController'],函数(TestController)
{
返回{
oneFunction:函数(回调)
{
//当我尝试在这里使用“TestController”时,我得到
//错误:模块名“TestController”未被删除
//尚未加载上下文“错误…”。。。
TestController.test();//错误
//我已经使用了多年,没有任何变化,
//它工作得很好。然后出乎意料地开始不工作了
//正在工作。好的,让我们试试别的:
if(TestController的类型==“未定义”)
{
var TestController=require('TestController');//错误
}
//上述方法有效了几个月,然后又失败了
//出人意料的是,同样的错误。我最后的办法就是这样
//这总是有效的,但是它使我的代码有20+左右
//回调层:
需要(['TestController'],函数(TestController){
TestController.test();
//有效,但将其声明为
//要求在顶部,如果它不工作,我必须
//每次包装我的代码?:(
});
},
另一个函数:function()
{
console.log(“你好”);
}
}
});
我收到“错误:尚未为上下文加载模块名“TestController”一次又一次地出错,直到我重新声明依赖项为止。我的问题是,如果我不得不像从未列出过一样不断地重新声明依赖项,那么将顶部的“TestController”声明为依赖项有什么意义?我在这里做错了什么

我在其他文件中声明“TestController”,它工作得很好,但偶尔会有一个声明失败……而且它总是一个不同的文件(大约有200-300个)……我不知道是哪一个,修复它的唯一方法是重新声明并包装它

有人看到我做错了什么可能导致这种情况吗?我不断更新RequireJS,看看它是否修复了它,但它没有:/

  • 版本
    • RequireJS 2.1.22
    • jquery-1.12.1
    • 节点4.2.6

正如@Louis所指出的,是循环依赖关系造成了问题

循环依赖解决方案#1:“导出” 以下是直接来自以下方面的解决方案:

如果定义循环依赖项(“a”需要“b”和“b”需要“a”),则在本例中,当调用“b”的模块函数时,它将获得“a”的未定义值。“b”可以在稍后使用require()方法定义模块后获取“a”(请确保将require指定为依赖项,以便使用正确的上下文查找“a”):

如果您熟悉CommonJS模块,则可以使用导出为该模块创建一个空对象,该对象可立即供其他模块参考

循环依赖解决方案#2:用madge可视化 我访问了这个npm模块,它将为您创建一个依赖关系图:

我决定用madge分析我的代码,并删除循环依赖项

以下是我如何使用该工具:

cd <Client-Code-Location>
madge --image dep.png .
cd
madge——image dep.png。
这给了我一个依赖关系的图像,但是没有找到循环依赖关系。因此我决定尝试另一种方法:

cd <Client-Code-Location>
madge --image dep.png --format amd .
cd
madge——image dep.png——格式amd。

通过这种方式,我可以看到我在哪里有循环依赖。

您描述的症状与循环依赖是一致的。您应该检查并确保代码中没有循环依赖项。哦!是的,我打赌就是这样!我从未检查过循环依赖关系。我有很多工作要做,谢谢!
cd <Client-Code-Location>
madge --image dep.png .
cd <Client-Code-Location>
madge --image dep.png --format amd .