Как преодолеть загрузку блока не удалось с помощью Angular ленивых загружаемых модулей

Если я вношу изменения в мое приложение angular, имена блоков будут изменены при сборке, а старая версия будет удалена из папки dist. После развертывания, если пользователь в данный момент находится на сайте, а затем перешел на другую часть сайта, я получаю ошибку с ошибкой загрузки, поскольку старый файл больше не существует.

Мое приложение построено с использованием angular cli, поэтому оно упаковано с помощью webpack.

В любом случае это можно преодолеть.

Ответ 1

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

Ответ 2

Я знаю, что немного опоздал к игре по этим вопросам, но я бы рекомендовал изменить подход к развертыванию.

Проверьте https://immutablewebapps.org/. Основная философия заключается в том, чтобы изолировать ваши временные ресурсы от переменных времени выполнения. Это дает массу преимуществ, но самые большие из них:

  • Нет проблем с кэшированием активов, потому что они изолированы на уровне маршрута
  • Тот же код, который был проверен в разработке, используется в производстве
  • Мгновенный откат с горячим кешем для потребителей в случае возникновения проблем
  • Созданные чанки сохраняются для предыдущей версии, изолированной маршрутами, избегая проблем активного развертывания и активного пользователя.

Это также не должно мешать предложению ** PreloadAllModules **, предложенному @dottodot ниже.

Ответ 3

Отключить хэширование кусков

ng build --output-hashing none

Для получения дополнительной информации см. официальную сборку документация

Ответ 4

Вы можете отправить какое-либо событие со стороны сервера, чтобы перезагрузить приложение. Кроме того, есть возможность предварительно выбрать ленивые модули в фоновом режиме, чтобы предварительно собрать их как можно скорее, а не ждать запроса этих модулей.

Ответ 5

попробуйте это ng build --output-hashing none

Ответ 6

Используйте предварительную загрузку. Вы получаете выгоду от ленивой загрузки, без хлопот, которые она вызывает в таких ситуациях. Все порции будут переданы пользователю как можно быстрее без замедления начального времени загрузки. Ниже приведен отрывок из https://vsavkin.com/angular-router-preloading-modules-ba3c75e424cb, объясняющий, как это работает (диаграммы см. в статье):

Сначала мы загружаем исходный пакет, который содержит только компоненты мы должны загрузить наше приложение. Так быстро может быть.

Затем мы загружаем приложение с помощью этого небольшого пакета.

На данный момент приложение работает, поэтому пользователь может запустить взаимодействуя с ним. Пока она это делает, мы, на заднем плане, предварительно загрузить другие модули.

Наконец, когда она нажимает на ссылку, ведущую на лениво загружаемый модуль, навигация мгновенная.

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

Ответ 7

Очистить кеш браузера. Работал для меня