我最近一直在使用RequireJS,但我是优化器的新手,我正在尝试将其添加到我的构建步骤中,但我遇到了一个问题。在它运行并将我的JS文件合并为一个之后,我的“main”的主体不再执行(在优化之前工作正常)。所有依赖JS都正确加载,但我的主define()中的实际代码没有(尽管我可以在最终的输出文件中看到它。这就是我的意思:
假设我的 main.js的简化版:
console.log("This statement outputs to console");
define(["jquery", "modernizr", "jquery.joyride"], function($) {
console.log("This statement does not");
}
正如我所提到的,我将在输出文件的内联中看到jquery,modernizer,joyride和两个console.log()语句,所以我相信它是正确生成的。我的猜测是它与我的require配置有关:
这是我的 app.js 的简化版:
requirejs.config({
"baseUrl": "/assets/js",
"paths": {
"jquery": "jquery"
},
"shim": {
"jquery.joyride": ["jquery"]
}
});
requirejs(["app/main"]);
我的假设是第二次requirejs()调用没有被执行。那可能吗?会导致这种情况发生的原因以及适当的解决办法是什么?
基本上, main.js 的优化版本如下所示:
(function(e,t){ ..jquery code.. };
define("jquery.joyride", function(){});
(function(a){ ...code here... });
console.log("This statement outputs to console");
define('main',["jquery", "modernizr", "jquery.joyride"], function($) {
console.log("This statement does not");
};
这是build config:
({
appDir: '../../',
baseUrl: "assets/js",
mainConfigFile: '../../assets/js/app.js',
dir: '../../../BUILD/',
optimizeCss: 'default',
modules: [
{
name: "main"
}
],
removeCombined: true,
preserveLicenseComments: false,
optimize: 'none' // I Disabled this to help me try and debug
})
它也有帮助,这是我用来包含我的JS的行(在我优化文件之前和之后的相同行):
<script data-main="/assets/js/app" src="/assets/js/require.js"></script>
答案 0 :(得分:0)
所以仔细观察上面分享的代码......问题是main.js的优化版本没有添加正确的模块名称(define("main"[
应该是define("app/main"[
。我怀疑这与两件事之一有关:
首先,测试/证明我的假设: manualy 编辑main.js的优化版本以匹配我上面提到的(“app / main”代替“main”)。如果有效,那么尝试这些东西(一次一个,而不是同时):
name:"main"
更改为name:"app/main"
requirejs(["app/main"]);
更改为requirejs(["main"]);