У меня есть приложение Angular 8, для которого у меня возникли проблемы с кешированием во время развертывания новых выпусков. В основном я заметил, что при использовании ng build --prod
опция outputHashing
установлена на all
в моем angular.json
. Следовательно, все файлы, сгенерированные ng build
, имеют в своих именах содержимое ha sh, что хорошо по двум причинам:
- браузер может безопасно долгое время кэшировать файлы моего приложения (если содержимое файла изменяется в новом выпуске, изменяется имя и, следовательно, файл перезагружается всеми клиентами)
- если файл не изменяется от одного выпуска к другому, он не будет повторно загружен
(примечание: index. html никогда не кэшируется)
Это кажется довольно эффективным.
Проблема в том, что не все файлы имеют этот кеш перебор имя. Файлы, объявленные как активы в angular.json
, просто копируются «как есть» во время сборки. Поэтому, если я выпущу новую версию своего приложения, у меня нет никакой гарантии, что клиенты будут использовать последние версии ресурсов.
Эти ресурсы включают JSON файлы перевода (используются ngx-translate) , изображения (указанные непосредственно в шаблонах приложения), а также другие вещи.
Я много читал об этом в Stack Overflow и GitHub, но не нашел подходящего решения.
Я попытался использовать @angular-builders/custom-webpack:browser
с настраиваемой конфигурацией Webpack, которая использует html-loader
и file-loader
для переименования файлов, а также каждой ссылки на них в исходном коде, но это, похоже, не сработало.
Возможно ли иметь имена очистки кеша для файлов ресурсов в приложении Angular? Если да, то какой подход рекомендуется и как он работает?