У меня постоянно возникают проблемы с кэшированными 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>
Я включаю это перед закрывающим тегом тела. Всякий раз, когда пользователь обновляет страницу после очистки своего кэша, все (новые) js-файлы с аргументом bust загружаются правильно. Проблема в том, что я не могу заставить своих пользователей очищать кеш каждый раз, когда я внедряю несколько новых js.
Обновление
Если я добавлю +(new Date()).getTime()
к функции requireConfig, файлы теперь получат аргумент времени, который, кажется, работает. Но по некоторым URL браузер все еще ищет файл js по неправильному пути. Например, когда я иду на URL, он загружается:
/static/main/js/text_contrast.js?bust=v181560938449189
, что дает 404.
После очистки моего кеша и перезагрузки файл находится по адресу:
/static/main/js/vendors/text_contrast.js?bust=v181560939213670
Похоже, это происходит с URL-адресами, которые я уже загружал в прошлом, с неверным путем, указывающим на файл text_contrast.js