React router позволяет реагировать на приложения /arbitrary/route
. Чтобы это работало, мне нужен мой сервер для отправки приложения React по любому подходящему маршруту.
Но сервер разработки веб-пакетов не обрабатывает произвольные конечные точки.
Здесь есть решение с использованием дополнительного экспресс-сервера. Как разрешить для webpack-dev-server разрешать точки входа из реагирующего маршрутизатора
Но я не хочу запускать другой экспресс-сервер, чтобы разрешить сопоставление маршрутов. Я просто хочу сказать, что webpack dev server должен совпадать с любым URL-адресом и отправить мне свое приложение реакции. Пожалуйста.
reactjs
ecmascript-6
webpack
react-router
eguneys
источник
источник
Ответы:
Я нашел самое простое решение, чтобы включить небольшой конфиг:
Я нашел это, посетив: PUSHSTATE С WEBPACK-DEV-SERVER .
источник
--history-api-fallback
devServer: { port: 3000, historyApiFallback: true },
Параметр historyApiFallback в официальной документации для webpack-dev-server четко объясняет, как этого можно добиться, используя
который просто возвращается к index.html, когда маршрут не найден
или
источник
historyApiFallback
webpack-dev-server
является преемникомwebpack-serve
, а не наоборот, как упомянуто в stackoverflow.com/questions/31945763/… .Добавление общедоступного пути в конфигурацию помогает webpack понять настоящий root (
/
), даже когда вы находитесь в подпроцессах, например./article/uuid
Поэтому измените конфигурацию вашего веб-пакета и добавьте следующее:
Без
publicPath
ресурсов не может быть загружен должным образом, только index.html.Проверено на Webpack
4.6
Большая часть конфига (просто для лучшей картинки):
источник
historyApiFallback
Трюк работал только для последней части URL по некоторым причинам./test
будет работать, но/test/test
даст 404.historyApiFallback: {index: '/'}
илиhistoryApiFallback: true
(оба работали для меня), настройкаpublicPath
была также необходима в моем случае (Маршрутизатор 5.2).У меня так работает
Работа над приложением по борьбе с беспорядками
источник
Моя ситуация была немного другой, так как я использую угловой CLI с webpack и опцию 'eject' после выполнения команды ng eject . Я изменил извлеченный скрипт npm для 'npm start' в package.json, чтобы передать флаг --history-api-fallback
источник
Если вы решите использовать
webpack-dev-server
, вы не должны использовать его для обслуживания всего приложения React. Вы должны использовать его, чтобы служить вашимbundle.js
файла, а также для статических зависимостей. В этом случае вам потребуется запустить 2 сервера, один для точек входа Node.js, которые фактически будут обрабатывать маршруты и обслуживать HTML, а другой - для пакета и статических ресурсов.Если вы действительно хотите использовать один сервер, вы должны прекратить использование
webpack-dev-server
и начать использовать webpack-dev-middleware на вашем сервере приложений. Он будет обрабатывать пакеты «на лету» (я думаю, что он поддерживает кеширование и оперативную замену модулей) и гарантирует, что ваши вызовыbundle.js
всегда будут актуальными.источник
Вы можете включить
historyApiFallback
обслуживаниеindex.html
вместо ошибки 404, если в этом месте не найден другой ресурс.Если вы хотите обслуживать разные файлы для разных URI, вы можете добавить основные правила перезаписи к этой опции.
index.html
Будет по- прежнему служили для других путей.источник
Я знаю, что этот вопрос для webpack-dev-server, но для всех, кто использует webpack-serve 2.0. с веб-пакетом 4.16.5 ; webpack-serve позволяет добавлять дополнения. Вам нужно создать
serve.config.js
:Ссылка
Вам нужно будет изменить скрипт разработки с
webpack-serve
наnode serve.config.js
.источник
Для меня у меня были точки "." на моем пути, например,
/orgs.csv
поэтому я должен был поместить это в мой веб-пакет Confgисточник
Я согласен с большинством существующих ответов.
Одна ключевая вещь, которую я хотел бы упомянуть, - если вы сталкиваетесь с проблемами при ручной перезагрузке страниц по более глубоким путям, где он сохраняет все, кроме последнего раздела пути, и привязывает к имени
js
файла вашего пакета, вам, вероятно, понадобится дополнительная настройка (особенноpublicPath
настройка ).Например, если у меня есть путь,
/foo/bar
и мой пакетный файл называетсяbundle.js
. Когда я пытаюсь вручную обновить страницу, я получаю сообщение 404,/foo/bundle.js
которое не может быть найдено. Интересно, что если вы попытаетесь перезагрузить с пути,/foo
вы не увидите никаких проблем (это потому, что резервный обрабатывает его).Попробуйте использовать нижеприведенное в сочетании с существующей
webpack
конфигурацией, чтобы решить эту проблему.output.publicPath
это ключевой элемент!источник