【发布时间】:2013-05-16 18:45:34
【问题描述】:
我正在处理一个相当复杂的 Require 项目;这个项目的核心是一个第三方视频播放器代码库,我们正在围绕它构建一个应用程序。我目前正在使用 Require 优化器制定我们的生产构建过程。
优化器效果很好,但是当我将应用程序与“内置”JS 一起使用时,Require 坚持通过插入额外的脚本标签来加载第三方模块。我搜索了编译后的 JS 并确认该模块已包含在构建中;但在运行时似乎无法识别。
这个模块是需要第三方模块的:
define(['models/Widget','amp_lib'], function(Widget) {
// Housekeeping/configuration
// Nothing to return here
})
模块 amp_lib 在主配置中定义:
require.config({
paths: {
amp_lib: 'path/to/module/src'
}
});
谁能帮助我了解 Require 如何确定特定模块是否已加载?我整天都在 Require 本身中四处寻找,希望找出这个决定是在哪里做出的,但无济于事。
【问题讨论】:
-
这只是第三方模块吗?第三方模块是否返回值?另外,您确定没有使用不同的路径在其他地方引用它吗?例如:“模块/amp_lib”。可以分享演示吗?
-
恐怕我不能真正分享演示......但是,这里有一些附加信息:该第三方模块的内容有所不同。如果我将内容替换为:'(function(){ return null; }());'然后 Require 不会重新加载模块。我想我要做的就是把它交给第三方开发者;他们本周在我们的办公室协调这个项目。最初我认为这与他们无关,但现在我想知道我们是否可以弄清楚他们(相当大的)代码库的哪一部分可能会导致问题。
-
更新:我今天发现了问题。结果我们得到的第三方模块使用了一些实用程序库,其中一个是 AMD 兼容的,因此在检测到加载器时有自己的 define() 函数。因此,在构建时,优化器只是将该库定义为模块,而不是整个代码库,这反过来又导致模块在运行时重新加载。经验教训:在 Require 项目中填充第三方内容时要小心。
标签: debugging requirejs dependency-management duplicate-removal