我有一个只执行一些代码的模块,以覆盖一些现有的功能。该模块不返回任何值。看起来有点像这样:
// module "patch.js"
define(function (require) {
var lib = require("lib");
lib.foo = function () {
// overwrite foo function here
}
});
然后我将其定义为我的主app模块的依赖项,如下所示:
// main.js
require.config({
shim: {
"app": {
deps: ["patch"]
}
}
});
然后我启动app模块:
// main.js
require(["app"],function (app) {
app.start();
});
运行未经优化的版本时,此工作正常。在app启动之前加载“patch”模块,并调用其中的代码。一切都很好。
当我使用r.js进行优化时,问题就开始了。我注意到“补丁”模块的代码被拉入优化文件但从未被调用过。
我可以通过在我的应用程序代码中的某处显式调用require("patch")
来强制调用它,但我宁愿在配置中定义此依赖项。
未优化和优化模块之间的行为差异是什么原因?为什么自动调用未优化模块,而优化模块包含在构建文件中但从未调用过?我可以使用配置选项解决它吗?我可以改变我定义“补丁”模块的方式来获得我追求的行为吗?
==编辑:添加r.js config ==
我正在使用grunt-contrib-requirejs。配置就像它一样简单。
{
baseUrl: "site/js",
mainConfigFile: "site/js/main.js",
out: "build/js/main.js",
name: "main",
optimize: "uglify2",
removeCombined: false
}
答案 0 :(得分:3)
要指出的几件事
Shim config应仅用于非AMD模块。例如,您正在尝试集成未在define
函数内定义的jQuery插件。所以这段代码不是必需的,甚至可以破坏你的应用程序:
require.config({
shim: {
"app": {
deps: ["patch"]
}
}
});
其次,尝试在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模块及其所有依赖项。
希望这会有所帮助。