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-fallbackdevServer: { 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
historyApiFallbackwebpack-dev-serveres 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/uuidModifique la configuración de su paquete web y agregue lo siguiente:
Sin
publicPathrecursos podría no cargarse correctamente, solo index.html.Probado en Webpack
4.6Parte más grande de la configuración (solo para tener una mejor imagen):
fuente
historyApiFallbacktruco solo funcionó para la última parte de la URL por alguna razón./testfuncionaría pero/test/testdaría 404.historyApiFallback: {index: '/'}ohistoryApiFallback: true(ambos funcionaron para mí), la configuraciónpublicPathtambié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.jsarchivo, 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-servery 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.jsestén siempre actualizadas.fuente
Puede habilitar el
historyApiFallbackservicio enindex.htmllugar 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.htmlse 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-serveanode 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
jsarchivo de paquete, probablemente necesite una configuración adicional (específicamentepublicPathconfiguración )Por ejemplo, si tengo una ruta
/foo/bary mi archivo de paquete se llamabundle.js. Cuando intento actualizar manualmente la página, aparece un mensaje 404 que/foo/bundle.jsno se puede encontrar. Curiosamente, si intentas recargar desde la ruta,/foono ves problemas (esto se debe a que el respaldo lo maneja).Intente usar lo siguiente junto con su
webpackconfiguración existente para solucionar el problema.output.publicPathes la pieza clave!fuente