这绝对是我在过去几天遇到过的一个错误。加载一个模块会导致应用程序不同部分中的第二个完全不相关的模块在之前完美工作的位置变得未定义。我已经使用了RequireJS很多 - 这不是一个脚本加载或循环依赖问题。
domReady -calls-> new View1() -iterates-> new SubView() -depends-> text!template
-calls-> new View2() --> undefined!
这会导致其他地方完全不相关的模块变得不确定:首先我需要在二线视图的文本文件被重复了好几次(1800+)时遇到的错误最常见。我通过将SubView功能集成到View模块中来解决它一段时间。
domReady -calls-> new CombinedView1() -depends-> text!template
-calls-> new View2() --> ... all good ...
随着项目的发展,我再次碰壁,真的需要找到解决的办法。包含更多模块会导致先前定义的模块随机变得不确定。要求抛出没有错误,浏览器也不会。我没有使用CoffeeScript或类似的东西。
我花了一些时间创建了一个我的应用程序的版本,它具有相同的模块和依赖性结构,依赖的视图,模型和集合被删除。这工作得很好,所以我只能假设存在某种内存问题?但Chrome从不抛出任何错误。
我想我的下一步将是填充我的骨架应用程序与一些耗费内存的循环,看看会发生什么:我会让你知道它是怎么回事。
使用Require v2.0.1,所以没有订单插件 - 依赖项和包都使用shim config指令进行配置。 非AMD模块加载:
P.S.道歉,如果这不是在正确的地方。我认为这会更好,但我真的不能在任何地方看到评论按钮。
更新: 这种依赖性结构打破了一贯:
Main
- View 1
- text!...
- View 2
- text!...
替换空字符串文字每次工作正常:
Main
- View 1
- View 2
那么,为什么等待加载导致文本视图1在主模块中显式设置为依赖项时变为未定义?当然,Main不应该被调用,直到它依赖的所有东西都被加载了?
我怀疑,这的确是一个RequireJS问题,而是一些浏览器相关的一个。它是否在不同的浏览器中一致地失败? RequireJS是否将任何问题(例如加载脚本时超时)记录到控制台? – Lucero
我在Chrome中看到的最多,但我也看到它也出现在Firefox中。没有RequireJS日志或错误。正在发生的错误是当我尝试实例化从加载的模块导出的Javascript函数(原型)时。这是抛出,因为该模块似乎没有正确加载,因为JavaScript不承认它是一个函数。这是错误实际发生的时间 - 这只是有时候。剩下的时间,代码执行得很好。无论如何,没有RequireJS超时错误。 – redhotvengeance
听起来像加载/初始化问题的顺序给我。请注意,如果您的代码中存在循环依赖关系,则可以获取未定义的引用,我会先查找它们。我们有一个由RequireJS加载的几百个JS文件的项目,并且没有任何问题(无论是在Chrome还是其他浏览器中)。 – Lucero