使用requirejs缓存问题js文件

时间:2019-06-19 09:16:36

标签: javascript caching requirejs

我一直在缓存的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文件

1 个答案:

答案 0 :(得分:0)

您可以将时间戳记添加到requirejs.config对象中的urlArgs,这样就不会缓存url了。

您可以通过以下方式更改代码

requireConfig("bust=v18");

requireConfig("bust=v18"+(new Date()).getTime());