【问题标题】:Require loads a module even though it's included in the buildRequire 加载一个模块,即使它包含在构建中
【发布时间】: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


【解决方案1】:

如上所述:

我今天发现了问题。结果我们得到的第三方模块使用了一些实用程序库,其中一个是 AMD 兼容的,因此在检测到加载器时有自己的 define() 函数。因此,在构建时,优化器只是将该库定义为模块,而不是整个代码库,这反过来又导致模块在运行时重新加载。经验教训:在 Require 项目中填充第三方内容时要小心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多