react router v6 项目构建部署后出现 `400` 加载 chunk 文件失败,根本原因是 webpack 打包时生成的静态资源路径(如 `/scenarioplanning/static/js/...`)被错误地相对于当前路由路径解析,而非应用根路径;需通过配置 `homepage` 字段和正确设置 `basename` 共同解决。
该问题并非代理配置(如 "proxy")所能解决——"proxy" 仅在开发阶段(npm start)生效,用于转发 API 请求,对生产构建(npm run build)后的静态资源路径完全无效。你截图中报错的 http://localhost:5000/scenarioplanning/static/js/251.400bc25d.chunk.js 明确表明:浏览器正尝试从子路径 /scenarioplanning/ 下加载 JS 资源,但实际资源位于 /static/ 目录(即站点根目录下),这是典型的 public URL 配置缺失导致。
在 package.json 的 顶层 添加:
{
"homepage": "."
}你当前代码中
✅ 生产环境应移除 basename(除非你明确将整个 React 应用挂载在非根路径,如 /myapp/):
// ✅ 正确:生产环境默认使用根路径,无需 basename} /> } /> } />
⚠️ 注意:exact 属性在 v6 中已废弃,path="scenarioplanning" 本身即精确匹配,无需 exact。
你在 Suspense 的 fallback 中使用了:
@@##@@
这是正确的模式——PUBLIC_URL 会自动注入 homepage 值(如 "." 或 "/myapp")。构建后,该路径将生成为 ./images/logo.png 或 /myapp/images/logo.png,与 homepage 严格一致。
npm runbuild npx serve -s build
遵循以上配置,即可彻底解决 React Router V6 构建后静态资源 404 的核心痛点,确保 SPA 在任意部署路径下稳定运行。