Кэширование выпуска js файлов с использованием requirejs - PullRequest
0 голосов
/ 19 июня 2019

У меня постоянно возникают проблемы с кэшированными 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

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете добавить метку времени к urlArgs в объекте requirejs.config, чтобы URL не кэшировались.

Один из способов сделать это - изменить код с

requireConfig("bust=v18");
*От 1005 * до
requireConfig("bust=v18"+(new Date()).getTime());
...