React router permite que las aplicaciones reaccionen para manejar /arbitrary/route
. Para que esto funcione, necesito que mi servidor envíe la aplicación React en cualquier ruta coincidente.
Pero el servidor de desarrollo webpack no maneja puntos finales arbitrarios.
Aquí hay una solución que usa un servidor express adicional. Cómo permitir que webpack-dev-server permita puntos de entrada desde react-router
Pero no quiero encender otro servidor express para permitir la coincidencia de rutas. Solo quiero decirle al servidor de desarrollo webpack que coincida con cualquier url y enviarme mi aplicación de reacción. Por favor.
reactjs
ecmascript-6
webpack
react-router
eguneys
fuente
fuente
Respuestas:
Encontré la solución más fácil para incluir una pequeña configuración:
Encontré esto visitando: PUSHSTATE WITH WEBPACK-DEV-SERVER .
fuente
--history-api-fallback
devServer: { port: 3000, historyApiFallback: true },
La opción historyApiFallback en la documentación oficial para webpack-dev-server explica claramente cómo puede lograrlo utilizando
que simplemente vuelve a index.html cuando no se encuentra la ruta
o
fuente
historyApiFallback
webpack-dev-server
es el sucesorwebpack-serve
, y no al revés, como se menciona en stackoverflow.com/questions/31945763/… .Agregar una ruta pública a la configuración ayuda a webpack a comprender root real (
/
) incluso cuando está en subrutas, por ejemplo./article/uuid
Modifique la configuración de su paquete web y agregue lo siguiente:
Sin
publicPath
recursos podría no cargarse correctamente, solo index.html.Probado en Webpack
4.6
Parte más grande de la configuración (solo para tener una mejor imagen):
fuente
historyApiFallback
truco solo funcionó para la última parte de la URL por alguna razón./test
funcionaría pero/test/test
daría 404.historyApiFallback: {index: '/'}
ohistoryApiFallback: true
(ambos funcionaron para mí), la configuraciónpublicPath
también fue esencial en mi caso (Router 5.2).Funciona para mi asi
Trabajando en la aplicación antidisturbios
fuente
Mi situación era un poco diferente, ya que estoy usando la CLI angular con webpack y la opción 'expulsar' después de ejecutar el comando ng eject . Modifiqué el script npm expulsado para 'npm start' en el package.json para pasar el indicador --history-api-fallback
fuente
Si elige usar
webpack-dev-server
, no debe usarlo para servir toda su aplicación React. Debe usarlo para servir subundle.js
archivo, así como las dependencias estáticas. En este caso, tendría que iniciar 2 servidores, uno para los puntos de entrada de Node.js, que realmente van a procesar rutas y servir el HTML, y otro para el paquete y los recursos estáticos.Si realmente desea un solo servidor, debe dejar de usar el
webpack-dev-server
y comenzar a usar el webpack-dev-middleware dentro de su servidor de aplicaciones. Procesará paquetes "sobre la marcha" (creo que admite el almacenamiento en caché y los reemplazos de módulos activos) y se asegurará de que sus llamadasbundle.js
estén siempre actualizadas.fuente
Puede habilitar el
historyApiFallback
servicio enindex.html
lugar de un error 404 cuando no se ha encontrado ningún otro recurso en esta ubicación.Si desea servir diferentes archivos para diferentes URI, puede agregar reglas básicas de reescritura a esta opción. El
index.html
se seguirá sirviendo para otros caminos.fuente
Sé que esta pregunta es para webpack-dev-server, pero para cualquiera que use webpack-serve 2.0. con paquete web 4.16.5 ; webpack-serve permite complementos. Deberá crear
serve.config.js
:Referencia
Deberá cambiar el script de desarrollo de
webpack-serve
anode serve.config.js
.fuente
Para mí tenía puntos "." en mi camino, por ejemplo
/orgs.csv
, tuve que poner esto en mi webpack confg.fuente
Estoy de acuerdo con la mayoría de las respuestas existentes.
Una cosa clave que quería mencionar es que si encuentra problemas al volver a cargar páginas manualmente en rutas más profundas donde mantiene la sección de la ruta excepto la última y agrega el nombre de su
js
archivo de paquete, probablemente necesite una configuración adicional (específicamentepublicPath
configuración )Por ejemplo, si tengo una ruta
/foo/bar
y mi archivo de paquete se llamabundle.js
. Cuando intento actualizar manualmente la página, aparece un mensaje 404 que/foo/bundle.js
no se puede encontrar. Curiosamente, si intentas recargar desde la ruta,/foo
no ves problemas (esto se debe a que el respaldo lo maneja).Intente usar lo siguiente junto con su
webpack
configuración existente para solucionar el problema.output.publicPath
es la pieza clave!fuente