我使用 r.js 优化器根据构建配置文件组合js文件,如documentation中所建议的那样。这是我的 build-config.js :
({
baseUrl: ".",
paths: {
jquery: '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min',
},
name: "main",
out: "main-built.2013-07-30.js"
})
正如您所看到的,它基于 main.js 文件,以下是它的代码:
requirejs.config({
baseUrl: 'scripts',
urlArgs: "bust=" + (new Date()).getTime(),
paths: {
jquery: [
'//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min',
'lib/jquery-1.9.1.min',
],
},
});
require([
'layout',
'cue',
], function() {
});
如果我在 main.js 中保留urlArgs: "bust=" + (new Date()).getTime()
所有外部文件(此处是从CDN加载的jquery)看起来像.../jquery.js?bust=1377412213
因此,每当我进行构建时,PITA都会注释掉这一行。我已经阅读了所有文档并搜索了解决方案,但一切都是徒劳的。也许我做错了?
答案 0 :(得分:2)
这方面迟到了,但这里我使用的解决方案:将urlArgs参数附加到配置中并进行后续调用。
HTML:
<script src="js/libs/require.js"></script>
<script src="js/config.js"></script>
<script>require(['main-app']);</script>
配置文件:
requirejs.config({
paths: {...},
shim: {...}
});
// Apply the cache bust only for the browser.
if (window) {
requirejs.config({
urlArgs: REQUIRE_NOCACHE ? "bust="+(new Date()).getTime() : null
});
}
优化器仅接受第一个requirejs.config
声明,并忽略后续代码。第二个requirejs.config
声明扩展而不是覆盖第一个声明,因此urlArgs
仍然成功应用于浏览器中的模块。希望有所帮助。
答案 1 :(得分:1)
以下解决方案适用于您的情况,您将在r.js构建中重命名main.js文件:
urlArgs: require.specified('main') ? "bust="+(new Date()).getTime() : null
上面的代码片段将检查名为&#39; main&#39;的模块,该模块将在开发中匹配,但不会在生产中检查,其中模块名为&#39; main-built.2013-07-30& #39;
我已经在开发和生产版本中进行了测试,它的工作原理! : - )
在require.specified()函数上: With requirejs is it possible to check if a module is defined without attempting to load it?