Принудительный refre sh кэшированного JS в SPA (reactJS), который изменяется между запросами с использованием реагирующего маршрутизатора - PullRequest
0 голосов
/ 30 мая 2020

Я пришел к выводу, что мой SPA, использующий reactJS в сочетании с реагирующим маршрутизатором (react-router-dom 5, служба маршрутизации на стороне клиента), МОЖЕТ получить ТОЛЬКО недавно развернутый файл javascript, ЕСЛИ ОНО через refre sh . Другого пути нет. Я ошибаюсь?

Сценарий:

  1. Пользователь находится на домашней странице
  2. Развернут новый пакет JS. (Я использую webpack и использую следующий формат: app.[hash].js согласно документации кэширования webpacks. Затем на него ссылается индекс. html например, <script src="app.dc1abe70ccbf1b703e01.js">)
  3. Пользователь теперь нажимает на другой ссылке (новый маршрут), НО старый JS все еще отображается (даже если доступен новый код)
  4. Только когда пользователь выполняет refre sh страницы, отображается новый код. (Статус HTTP 200, а затем 304 при каждом последующем обновлении sh до тех пор, пока JS не изменится снова, что приведет к еще 200 и так далее)

Теперь я прошел через несколько потоков, но я до сих пор не понимаю, как реализовать простое решение , чтобы получить только что развернутый JS файл БЕЗ refre sh из серверной части для SPA (ReactJS) с использованием реактивного маршрутизатора, который заменяет кешированную версию файла JS между запросами.

Насколько я понимаю

Когда вы используете реактивный маршрутизатор, route загружается в SPA при нажатии (на стороне клиента) без запроса каких-либо html или js от серверной части, потому что в этом нет необходимости. т.е. загрузка происходит мгновенно, потому что это должно быть SPA. Это имеет смысл, потому что, как я уже сказал, когда приложение загружается в первый раз, загружается app.[hash].js и впоследствии на него ссылаются.

Я видел много других потоков, предлагающих различные решения, например:

  1. вынуждает сервер выдавать новый файл JS: script.js?v=1 Однако это взлом, и в результате вы получите несколько версий файлов js в своем браузере согласно this. Кроме того, Я использую маршруты (по сути, ссылки, управляемые через маршрутизатор реакции). Я думаю, что script.js?v=1 для отдельных ссылок. Я также использую формат веб-пакетов для своих js ссылок: app.[hash].js
  2. Другие задавали тот же вопрос относительно кеширования и SPA, но никогда не получали ответов типа здесь и здесь

Вывод и цель

По этому комментарию: This is expected behaviour and until user will not refreshes his page, new changes will not be loaded – Zohaib Ijaz Apr 13 at 14:02 из этой нити

БОЛЬШИНСТВО всего, что я исследовал, не относится конкретно к ReactJS PLUS response-router-dom. Они упоминают управление версиями js файлов с ?ver=xyz, но я считаю, что это для отдельных ссылок, а НЕ для маршрутизатора с маршрутами. Некоторые другие упоминают использование app.[hash].js, но затем останавливаются, чтобы объяснить, что делать дальше.

ВСЕ, что я исследовал, наводит меня на мысль, что для того, чтобы увидеть новые JS изменения, следующие при нажатии ссылки на реактивный маршрутизатор мой ReactJS SPA с реактивным маршрутизатором может видеть эти новые изменения, только если он обновлен. И если так, то РЕШЕНИЯ НЕТ, кроме как надеяться, что клиент обновит sh страницу (потому что это практическое решение)?

ps Я использую express сервер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...