我有一个模块,它只执行一些代码以覆盖一些现有功能。该模块不返回任何值。它看起来有点像这样:
// 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
}