我们最近使用 create-react-app 和 react-router v5 为我们的应用添加了一些子导航功能。我的解决方案是创建子路由,因为在对不同页面进行分组时这在语义上似乎是正确的:
<Switch>
<Route to='/' component={HomePage} />
<Route to='/normalroute' component={NormalComponent} />
<Route to='/cars/list' component={CarsList} />
<Route to='/cars/configuration' component={CarsConfig} />
<Route to='/cars'>
<Redirect to='/cars/list' />
</Route>
</Switch>
这对于开发环境中的 CRA 来说工作得很好。但是,当我去构建时,我遇到了问题。导航到正常路由(即 /
或 /normalroute
)会呈现预期的组件。但是转到这些子路由中的任何一个都会破坏整个应用程序,并且没有任何渲染。我在控制台中收到错误:
Uncaught SyntaxError: Unexpected token '<'
main.b4849a20.chunk.js:1 Uncaught SyntaxError: Unexpected token '<'
manifest.json:1 Manifest: Line: 1, column: 1, Syntax error.
我有一种感觉,这实际上与我的静态文件的提供方式有关。我正在使用 node/express 应用程序来提供静态文件。执行此操作的 express 应用程序部分如下所示:
app.use(express.static("../my_app/build/", { redirect: true }));
app.get("*", (req, res) =>
res.sendFile(
path.resolve(__dirname, "../my_app/build", "index.html")
)
);
我看到我的静态路由适用于根路径或一级路径(/
或 /cars
),但是当存在二级路径(/cars/subpath
)时,东西坏了。 Express 正在从 subpath/static/<js|css>/filename.chunk.<js|css>
提供资产文件(js 和 css),后者路由回服务 index.html。你可以在这里看到:
(真实路线命名为/devices
,而不是/cars
)
从 express 提供静态文件的方式有问题,但我无法确定。我尝试修改快速代码以使用 this solution,但没有任何区别。任何帮助表示赞赏。