React路由器允许反应应用程序处理 /arbitrary/route
. 为了实现这一点,我需要我的服务器在任何匹配的路由上发送React应用程序 .
但webpack dev server不处理任意 endpoints .
这里有一个使用附加快速服务器的解决方案 . How to allow for webpack-dev-server to allow entry points from react-router
但我不想启动另一个快速服务器以允许路由匹配 . 我只是想告诉webpack dev服务器匹配任何网址并发送给我我的反应应用程序 . 请 .
8 回答
我发现包含一个小配置的最简单的解决方案:
我通过访问找到了这个:http://jaketrent.com/post/pushstate-webpack-dev-server/
historyApiFallback 官方文档上的 historyApiFallback 选项清楚地解释了如何通过使用来实现
当找不到路线时,它会简单地回到index.html
要么
我的情况有点不同,因为我在运行ng eject命令后使用带有webpack的角度CLI和'eject'选项 . 我在package.json中为'npm start'修改了弹出的npm脚本,以传入--history-api-fallback标志
这样对我有用
致力于防暴应用
如果您选择使用
webpack-dev-server
,则不应使用它来为整个React应用程序提供服务 . 您应该使用它来提供bundle.js
文件以及静态依赖项 . 在这种情况下,您必须启动2个服务器,一个用于Node.js入口点,实际上将处理路由并提供HTML,另一个用于bundle和静态资源 .如果您真的想要一台服务器,则必须停止使用
webpack-dev-server
并开始在app-server中使用webpack-dev-middleware . 它将处理捆绑包"on the fly"(我认为它支持缓存和热模块替换)并确保您对bundle.js
的调用始终是最新的 .添加配置的公共路径有助于webpack了解真正的根(
/
),即使您在子路由上,例如 ./article/uuid
因此,修改您的webpack配置并添加以下内容:
没有
publicPath
资源可能无法正确加载,只有index.html .在Webpack上测试
4.6
配置的较大部分(只是为了获得更好的图片):
当在此位置找不到其他资源时,您可以启用historyApiFallback来提供
index.html
而不是404错误 .如果要为不同的URI提供不同的文件,可以向此选项添加基本的重写规则 .
index.html
仍将用于其他路径 .我知道这个问题适用于webpack-dev-server,但适用于使用 webpack-serve 2.0. 和 webpack 4.16.5 的任何人; webpack-serve允许附加组件 . 您需要创建
serve.config.js
:Reference
您需要将开发脚本从
webpack-serve
更改为node serve.config.js
.