【发布时间】:2012-01-09 01:09:17
【问题描述】:
RequireJS 似乎在内部做了一些缓存所需的 javascript 文件的事情。如果我对所需文件之一进行更改,我必须重命名该文件才能应用更改。
将版本号作为查询字符串参数附加到文件名末尾的常见技巧不适用于 requirejs <script src="jsfile.js?v2"></script>
我正在寻找一种方法来防止 RequireJS 所需脚本的这种内部缓存,而不必在每次更新我的脚本文件时重命名它们。
跨平台解决方案:
我现在在开发期间使用urlArgs: "bust=" + (new Date()).getTime() 进行自动缓存清除,在生产过程中使用urlArgs: "bust=v2" 在推出更新的所需脚本后增加硬编码版本号。
注意:
@Dustin Getz 在最近的回答中提到,当 Javascript 文件像这样不断刷新时,Chrome 开发者工具会在调试期间删除断点。一种解决方法是在代码中编写 debugger; 以在大多数 Javascript 调试器中触发断点。
特定于服务器的解决方案:
对于可能更适合您的服务器环境(例如 Node 或 Apache)的特定解决方案,请参阅下面的一些答案。
【问题讨论】:
-
你确定这不是服务器或客户端在做缓存吗? (已经使用所需的 js 几个月了,没有注意到任何类似的东西) IE 被捕获缓存 MVC 操作结果,chrome 正在缓存我们的 html 模板,但是当浏览器缓存被重置时,js 文件似乎都刷新了。我想如果你想使用缓存但你不能像往常一样做,因为来自所需 js 的请求正在删除可能导致问题的查询字符串?
-
我不确定 RequireJS 是否会删除类似的附加版本号。它可能是我的服务器。有趣的是 RequireJS 如何有一个缓存破坏器设置,所以你可能是对的,它删除了我在所需文件上附加的版本号。
-
我用潜在的缓存解决方案更新了我的答案
-
现在我可以将以下内容添加到我今天早上在博客文章中提出的长篇大论中:codrspace.com/dexygen/… 也就是说,我不仅必须添加缓存破坏,而且 require.js 会忽略硬刷新。
-
我对这个用例感到困惑......这是为了将 AMD 模块热加载到前端还是什么?
标签: javascript jquery requirejs