Le routeur React permet aux applications de réagir /arbitrary/route
. Pour que cela fonctionne, j'ai besoin que mon serveur envoie l'application React sur n'importe quel itinéraire correspondant.
Mais le serveur de développement Webpack ne gère pas les points de terminaison arbitraires.
Il existe ici une solution utilisant un serveur express supplémentaire. Comment autoriser webpack-dev-server à autoriser les points d'entrée de react-router
Mais je ne veux pas lancer un autre serveur express pour permettre la correspondance d'itinéraire. Je veux juste dire au serveur de développement Webpack de faire correspondre n'importe quelle URL et m'envoyer mon application de réaction. S'il vous plaît.
reactjs
ecmascript-6
webpack
react-router
eguneys
la source
la source
Réponses:
J'ai trouvé la solution la plus simple pour inclure une petite configuration:
J'ai trouvé ceci en visitant: PUSHSTATE AVEC WEBPACK-DEV-SERVER .
la source
--history-api-fallback
devServer: { port: 3000, historyApiFallback: true },
L' option historyApiFallback sur la documentation officielle pour webpack-dev-server explique clairement comment vous pouvez y parvenir en utilisant
qui revient simplement à index.html lorsque l'itinéraire n'est pas trouvé
ou
la source
historyApiFallback
webpack-dev-server
est le successeur dewebpack-serve
, et non l'inverse comme mentionné dans stackoverflow.com/questions/31945763/… .L'ajout d'un chemin public à config aide webpack à comprendre le vrai root (
/
) même lorsque vous êtes sur des sous-routages, par exemple./article/uuid
Modifiez donc votre configuration Webpack et ajoutez ce qui suit:
Sans
publicPath
ressources, il se peut que le chargement ne soit pas correct, seul index.html.Testé sur Webpack
4.6
Une plus grande partie de la configuration (juste pour avoir une meilleure image):
la source
historyApiFallback
astuce n'a fonctionné que pour la dernière partie de l'URL pour une raison quelconque./test
fonctionnerait mais/test/test
donnerait 404.historyApiFallback: {index: '/'}
ouhistoryApiFallback: true
(les deux ont fonctionné pour moi), le paramétragepublicPath
était également essentiel dans mon cas (routeur 5.2).Fonctionne pour moi comme ça
Travailler sur l'application anti-émeute
la source
Ma situation était un peu différente, car j'utilise la CLI angulaire avec webpack et l'option 'eject' après avoir exécuté la commande ng eject . J'ai modifié le script npm éjecté pour 'npm start' dans le package.json pour passer l'indicateur --history-api-fallback
la source
Si vous choisissez de l'utiliser
webpack-dev-server
, vous ne devez pas l'utiliser pour diffuser l'intégralité de votre application React. Vous devez l'utiliser pour servir votrebundle.js
fichier ainsi que les dépendances statiques. Dans ce cas, vous devrez démarrer 2 serveurs, un pour les points d'entrée Node.js, qui vont réellement traiter les routes et servir le HTML, et un autre pour le bundle et les ressources statiques.Si vous voulez vraiment un serveur unique, vous devez arrêter d'utiliser le
webpack-dev-server
et commencer à utiliser le webpack-dev-middleware dans votre serveur d'application. Il traitera les bundles "à la volée" (je pense qu'il prend en charge la mise en cache et les remplacements de modules à chaud) et s'assurera que vos appelsbundle.js
sont toujours à jour.la source
Vous pouvez activer
historyApiFallback
laindex.html
diffusion de l'erreur au lieu d'une erreur 404 lorsqu'aucune autre ressource n'a été trouvée à cet emplacement.Si vous souhaitez servir différents fichiers pour différents URI, vous pouvez ajouter des règles de réécriture de base à cette option. Le
index.html
sera toujours servi pour les autres chemins.la source
Je sais que cette question est pour webpack-dev-server, mais pour tous ceux qui utilisent webpack-serve 2.0. avec webpack 4.16.5 ; webpack-serve permet des add-ons.Vous devrez créer
serve.config.js
:Référence
Vous devrez changer le script de développement
webpack-serve
de ennode serve.config.js
.la source
Pour moi, j'avais des points "." dans mon chemin, par exemple
/orgs.csv
, j'ai donc dû mettre cela dans ma configuration webpack.la source
Je suis d'accord avec la majorité des réponses existantes.
Une chose clé que je voulais mentionner est que si vous rencontrez des problèmes lors du rechargement manuel des pages sur des chemins plus profonds où il conserve la totalité sauf la dernière section du chemin et des punaises sur le nom de votre
js
fichier bundle, vous avez probablement besoin d'un paramètre supplémentaire (en particulier lepublicPath
paramètre ).Par exemple, si j'ai un chemin
/foo/bar
et que mon fichier bundler est appelébundle.js
. Lorsque j'essaie d'actualiser manuellement la page, un message 404/foo/bundle.js
est introuvable. Fait intéressant, si vous essayez de recharger à partir du chemin,/foo
vous ne voyez aucun problème (c'est parce que la solution de secours le gère).Essayez d'utiliser ce qui suit en conjonction avec votre
webpack
configuration existante pour résoudre le problème.output.publicPath
est la pièce maîtresse!la source