我正在使用require.js和r.js打包我的AMD模块。我正在使用jquery& requirejs通过以下语法:
<script data-main="/js/client" src="/js/external/require-jquery.js"></script>
这一切都很有效。邮政包装,但我遇到了很多问题,铬和&amp;移动safari持有client.js的缓存版本。我想向client.js添加一个缓存器,但我似乎无法弄清楚如何使用上面的语法来实现它。
我尝试了一些变体:
<script data-main="js/client.js?b=busted" src="/js/external/require-jquery.js"></script>
但现在需要尝试从/
获取client.js,而不是/js
,所以它是404s。
我也尝试添加
urlArgs : "bust="+new Date().getTime()
到require.config
,但似乎没有效果。
我也尝试将相同的值添加到app.build.js
,但是当它在那里时,r.js不再连接我的js文件,只是对它们进行了解释。
破坏require.js数据主脚本缓存的正确语法是什么?
答案 0 :(得分:74)
您如何定义require.config?我认为在导入require.js之前它要生效,你需要像这样编码:
<script type="text/javascript">
var require = {
baseUrl: "/scripts/",
waitSeconds: 15,
urlArgs : "bust="+new Date().getTime()
};
</script>
<script data-main="app/main" src="/scripts/require.js"></script>
具体来说,一个名为&#39;的对象需要&#39;必须在导入require.js之前构造。
<强>更新强>
正如Jesse在下面的评论中指出的那样,您应该将一些增强功能应用于您的require {}对象以供生产使用。以上示例来自RequireJS文档,并尽可能少地修改以回答此问题。
以下是生产用途需要考虑的一些事项:
因此,如果您应用这些技术,您的代码可能如下所示:
<script type="text/javascript">
var require = {
baseUrl: "/scripts/",
waitSeconds: 15,
urlArgs : "bust="+{{buildNumber}},
deps : ['app/main']
};
</script>
<script src="/scripts/require.js?bust={{buildNumber}}"></script>
注意,在这种情况下,{{buildNumber}}是服务器提供的值。
更新2
urlArgs缓存清除解决方案存在问题。遗憾的是,您无法控制可能位于您与用户的Web浏览器之间的所有代理服务器。遗憾的是,其中一些代理服务器配置为在缓存文件时忽略URL参数。如果发生这种情况,您的JS文件的错误版本将传递给您的用户。
我建议您在的Javascript文件名请求中使用buildNumber
,例如buildNumber.myModule.js
(前缀)或myModule.buildNumber.js(后缀)。您可以通过修改baseUrl来使用前缀样式:
baseUrl: "/scripts/buildNumber",
请注意缺少&#39; /&#39;在baseUrl的末尾。
您需要使用require.js的修改版本才能使用后缀解决方案。您可以在此处详细了解:https://stackoverflow.com/a/21619359/1017787
显然,在任何一种情况下,您都希望使用某种解决方案将buildNumber
替换为随每个版本更改的某种类型的版本号。
答案 1 :(得分:-2)
开发版
//Join the path parts together, then figure out if baseUrl is needed.
url = syms.join('/');
url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js'));
url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;
OR
制作版
e).join("/"),h=m(d,h)){H(h)&&(h=h[0]);a.splice(0,e,h);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||c?"":".js");
并在?v=x.0
.js
url += (ext || (/^data\:|^blob\:|\?/.test(url) || skipExt ? '' : '.js?v=1.0'));
OR
(/^data\:|\?/.test(d)||c?"":".js?v=1.0");