我一直在缓存的js文件中遇到问题,这导致用户没有最新的js,并且浏览器在文件中出现js错误,而文件找不到它应该包含在requirejs中。
我的requirejs(版本2.3.6)设置如下:
<script src="{% static 'main/js/require.js' %}"></script>
<script>
function requireConfig(urlArgs) {
requirejs.config({
baseUrl: '/static/main/js/',
urlArgs: urlArgs,
waitSeconds: 15,
packages: [{
name: 'moment',
location: '//cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0',
main: 'moment'
}],
paths: {
// vendors
'jquery': '//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min',
'jquery_ui': '//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min' ,
'text_contrast': './vendors/text_contrast',
},
shim: {
'jquery_ui': {
deps: ['jquery']
},
'text_contrast': {
exports: 'hex',
},
}
});
}
</script>
<script type="text/javascript">
requireConfig("bust=v18");
require(['platform/init'], function (m) {
m.init({
debug: {{ debug|yesno:"true,false" }},
});
});
</script>
我在结束标记前加上了这个。每当用户在清除缓存后刷新页面时,所有带有bust参数的(新)js文件都会正确加载。问题是,每次部署一些新的js时,我都无法强迫用户清除其缓存。
更新
如果我将+(new Date()).getTime()
添加到requireConfig函数中,文件现在将获得time参数,这似乎可以正常工作。但是在某些URL上,浏览器仍然在错误的路径下查找js文件。例如,当我转到一个网址时,它会加载:
/static/main/js/text_contrast.js?bust=v181560938449189
给出404。 清除缓存并重新加载后,可以在以下位置找到文件:
/static/main/js/vendors/text_contrast.js?bust=v181560939213670
这似乎发生在我过去已经加载的网址上,错误的路径指向text_contrast.js
文件
答案 0 :(得分:0)
您可以将时间戳记添加到requirejs.config对象中的urlArgs,这样就不会缓存url了。
您可以通过以下方式更改代码
requireConfig("bust=v18");
到
requireConfig("bust=v18"+(new Date()).getTime());