【问题标题】:Ensure RequireJS modules are invoked in an r.js optimised app确保在 r.js 优化的应用程序中调用 RequireJS 模块
【发布时间】:2013-09-19 09:12:13
【问题描述】:

我有一个模块,它只执行一些代码以覆盖一些现有功能。该模块不返回任何值。有点像这样:

// module "patch.js"
define(function (require) {
    var lib = require("lib");
    lib.foo = function () {
        // overwrite foo function here
    }
});

然后我将它定义为我的主应用程序模块的依赖项,如下所示:

// main.js
require.config({
    shim: {
        "app": {
            deps: ["patch"]
        }
    }
});

然后我像这样启动应用模块:

// main.js
require(["app"],function (app) {
    app.start();
});

这在运行未优化版本时可以正常工作。 “补丁”模块在应用程序启动之前加载并调用其中的代码。一切都很好。

当我使用 r.js 进行优化时,问题就开始了。我注意到“补丁”模块的代码被拉入优化文件但从未被调用。

我可以通过在我的应用程序代码中的某处显式调用require("patch") 来强制它调用,但我宁愿只在配置中定义此依赖项。

未优化模块和优化模块之间的这种行为差异的原因是什么?为什么自动调用未优化的模块,而优化的模块包含在构建文件中但从未调用?我可以使用配置选项解决它吗?我可以改变我定义“补丁”模块的方式来获得我所追求的行为吗?

== 编辑:添加 r.js 配置 ==

我正在使用 grunt-contrib-requirejs。配置非常简单。

{
    baseUrl: "site/js",
    mainConfigFile: "site/js/main.js",
    out: "build/js/main.js",
    name: "main",
    optimize: "uglify2",
    removeCombined: false
}

【问题讨论】:

  • 您能提供您的 r.js 优化器配置吗?
  • 谢谢,刚刚添加。

标签: javascript optimization requirejs r.js


【解决方案1】:

有几点需要说明

  1. Shim 配置应仅用于非 AMD 模块。例如,您正在尝试集成一个未在 define 函数中定义的 jQuery 插件。所以这段代码不是必须的,甚至会破坏你的应用:

    require.config({
        shim: {
            "app": {
                deps: ["patch"]
            }
        }
    });
    
  2. 其次,尝试在 r.js 优化器中定义应用中的模块

    {
        baseUrl: "site/js",
        mainConfigFile: "site/js/main.js",
        out: "build/js/main.js",
        name: "main",
        optimize: "uglify2",
        removeCombined: false,
        modules : [
            {
                name : 'site/js/main.js'
            }
        ]
    }
    

通过这种方式,r.js 将知道如何正确捆绑 main.js 模块及其所有依赖项。

希望这会有所帮助。

【讨论】:

  • 谢谢,这让我走上了正轨。我认为关键信息与您的第 1 点有关。仅将 shim 用于非 AMD 模块的配置,而不用于引导 AMD 模块的部门,尤其是我的主要“应用程序”模块。我将“app”从 shim 中移出,并在“app”本身中明确定义了它的主要部门。现在事情似乎更快乐了。再次感谢。
猜你喜欢
  • 2013-07-29
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2013-03-18
  • 1970-01-01
  • 2016-07-08
相关资源
最近更新 更多