2017-02-23 3 views
2

Итак, у меня есть несколько клиентов с окнами браузера, открытыми с помощью приложения Angular 2. Затем я создаю ng build -prod и публикую новую сборку на сервере.Как обновить браузер после нового развертывания приложения Angular2

Как заставить клиентов обновлять все свои кешированные скрипты?

+2

Я обнаружил, что это проблема, даже когда приложение не запущено, и пользователь позже открывает свой браузер на странице запуска приложения. Браузер просто отображает кешированную версию страницы и использует кешированную версию всех скриптов. –

ответ

0

Я только что закончил реализацию решения этой проблемы.

Я пробовал несколько разных подходов, но в итоге поддерживал отдельный json-файл, который приложение может запрашивать с заданным интервалом и сравнивать с текущей загруженной версией, а затем действовать соответствующим образом.

Я также играл с sw-precache от google и несколькими другими вещами, которые, как я надеялся, просто заставят проблему уйти. SW-Precache Это выглядит потрясающе, но не очень надежно решает нашу проблему, так как я не мог найти способ запланировать регулярные проверки на недействительность рассматриваемого кеша.

Gotcha номер 1: Добавить новый файл в блок активов в angular-cli.json, чтобы он был скопирован в папку распространения и не был включен в встроенный файл js, так как это отрицало бы всю точку что мы пытаемся сделать.

"assets": [ 
    "assets", 
    "favicon.ico", 
    "web.config", 
    "version.json" 
    ], 

Тогда я просто создал простой сервис с функцией, чтобы запросить этот файл, а другие, чтобы установить и интервал повторно вызвать запрос. Я также решил использовать «жесткий» кеш-код для этих запросов, включив временную метку unix в качестве параметра запроса. Это может быть старая школа, но она гарантирует, что независимо от того, где и где это настроено, вы не получите кешированную версию файла version.json.

Наконец-то я бы порекомендовал некоторый способ сохранить этот файл version.json в строке с номером версии вашего приложения. Быстрый поиск привел меня

Versiony on NPM

, который после того, как НПМ установки позволяет очень простые модификации семантических номера версий. Я добавил несколько сценариев в свой пакет package.json, чтобы автоматизировать, чтобы убедиться, что version.json находится в соответствии с пакетом. Json перед сборкой, чтобы убедиться, что нет hickups, потому что код изменился, но в версии нет.

Смежные вопросы