Я пришел к выводу, что мой SPA, использующий reactJS в сочетании с реагирующим маршрутизатором (react-router-dom 5
, служба маршрутизации на стороне клиента), МОЖЕТ получить ТОЛЬКО недавно развернутый файл javascript, ЕСЛИ ОНО через refre sh . Другого пути нет. Я ошибаюсь?
Сценарий:
- Пользователь находится на домашней странице
- Развернут новый пакет JS. (Я использую webpack и использую следующий формат:
app.[hash].js
согласно документации кэширования webpacks. Затем на него ссылается индекс. html например, <script src="app.dc1abe70ccbf1b703e01.js">
) - Пользователь теперь нажимает на другой ссылке (новый маршрут), НО старый JS все еще отображается (даже если доступен новый код)
- Только когда пользователь выполняет refre sh страницы, отображается новый код. (Статус HTTP 200, а затем 304 при каждом последующем обновлении sh до тех пор, пока JS не изменится снова, что приведет к еще 200 и так далее)
Теперь я прошел через несколько потоков, но я до сих пор не понимаю, как реализовать простое решение , чтобы получить только что развернутый JS файл БЕЗ refre sh из серверной части для SPA (ReactJS) с использованием реактивного маршрутизатора, который заменяет кешированную версию файла JS между запросами.
Насколько я понимаю
Когда вы используете реактивный маршрутизатор, route загружается в SPA при нажатии (на стороне клиента) без запроса каких-либо html или js от серверной части, потому что в этом нет необходимости. т.е. загрузка происходит мгновенно, потому что это должно быть SPA. Это имеет смысл, потому что, как я уже сказал, когда приложение загружается в первый раз, загружается app.[hash].js
и впоследствии на него ссылаются.
Я видел много других потоков, предлагающих различные решения, например:
- вынуждает сервер выдавать новый файл JS:
script.js?v=1
Однако это взлом, и в результате вы получите несколько версий файлов js в своем браузере согласно this. Кроме того, Я использую маршруты (по сути, ссылки, управляемые через маршрутизатор реакции). Я думаю, что script.js?v=1
для отдельных ссылок. Я также использую формат веб-пакетов для своих js ссылок: app.[hash].js
- Другие задавали тот же вопрос относительно кеширования и 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 сервер