RequireJS似乎在内部做了一些事情,缓存所需的javascript文件。如果我对所需的文件之一进行了更改,我必须重命名该文件,以便应用更改。
将版本号作为查询字符串参数附加到文件名末尾的常见技巧不适用于requirejs <script src="jsfile.js? "脚本v2”> < / >
我正在寻找的是一种方法,以防止RequireJS所需脚本的这种内部缓存,而不必在每次更新脚本文件时重命名脚本文件。
跨平台解决方案:
我现在使用urlArgs: "bust=" + (new Date()). gettime()在开发过程中自动缓存破坏和urlArgs: "bust=v2"的生产,在推出一个更新的所需脚本后,我增加硬编码的版本num。
注意:
@Dustin Getz在最近的回答中提到,当Javascript文件不断刷新时,Chrome开发工具将在调试过程中删除断点。一个解决方法是编写调试器;在大多数Javascript调试器中触发断点。
特定于服务器的解决方案:
有关可能更适合您的服务器环境(如Node或Apache)的特定解决方案,请参阅下面的一些答案。
RequireJS可以配置为每个脚本url附加一个值,用于缓存破坏。
来自RequireJS文档(http://requirejs.org/docs/api.html#config):
urlArgs:额外的查询字符串参数附加到RequireJS的url
用于获取资源。最有用的缓存崩溃时,浏览器或
服务器配置不正确。
示例:将"v2"附加到所有脚本:
require.config({
urlArgs: "bust=v2"
});
出于开发目的,你可以通过添加时间戳来强制RequireJS绕过缓存:
require.config({
urlArgs: "bust=" + (new Date()).getTime()
});
受到require.js data-main上的过期缓存的启发,我们用以下ant任务更新了我们的部署脚本:
<target name="deployWebsite">
<untar src="${temp.dir}/website.tar.gz" dest="${website.dir}" compression="gzip" />
<!-- fetch latest buildNumber from build agent -->
<replace file="${website.dir}/js/main.js" token="@Revision@" value="${buildNumber}" />
</target>
main.js的开头是这样的:
require.config({
baseUrl: '/js',
urlArgs: 'bust=@Revision@',
...
});