【发布时间】:2020-10-29 18:55:16
【问题描述】:
我将我的第一个 Gatsby 项目部署到 github 页面:
回购:https://github.com/michal-kurz/stfuandclick
gh-pages:https://michal-kurz.github.io/stfuandclick/app/(从gh-pages 分支生成)
它有一页src/pages/app.tsx,它使用Reach Router进行动态路由。
// app.tsx
const App = () => (
<>
<GlobalStyles />
<Provider store={store}>
<ThemeProvider theme={theme}>
<Router>
<Homepage path={`${BASE_URL}/app/`} />
<Team path={`${BASE_URL}/app/team/:teamName/`} />
</Router>
</ThemeProvider>
</Provider>
</>
)
// gatsby-node.js
exports.onCreatePage = async ({ page, actions }) => {
const { createPage } = actions
if (page.path.match(/^\/app/)) {
page.matchPath = '/app/*'
createPage(page)
}
}
注意:BASE_URL 等于生产环境版本中的/stfuandclick 和其他环境中的''
在开发模式(gatsby develop)下一切正常,但在部署版本上,如果不使用/app/作为应用程序的入口点(转到/app/并单击蓝色按钮),则无法访问/team/:teamName工作正常)。
直接打开 /team/:teamName 链接会导致 404(除非之前通过 /app/ 访问它缓存,但随后 ctrl + f5 会再次导致 404)。
似乎gatsby.node.js 在部署应用程序后无法正常工作。我最初怀疑它根本不起作用,但显然情况并非如此,因为注释所有代码会进一步破坏应用程序(团队页面在通过来自/app 的链接访问时突然中断)。
我尝试在生产版本中为 gatsby-node.js 中的路径添加前缀 BASE_URL,如下所示:
exports.onCreatePage = async ({ page, actions }) => {
const { createPage } = actions
if (page.path.match(/^\/stfuandclick\/app/)) {
page.matchPath = '/stfuandclick/app/*'
createPage(page)
}
}
并且还分别为gatsby-node.js 中的两个路径中的每一个添加前缀,但没有运气。
我的gatsby-config.json 中有pathPrefix: (full config here)
module.exports = {
pathPrefix: '/stfuandclick',
// ...
}
我使用以下纱线脚本进行部署:(full package.json here)
"deploy": "gatsby build --prefix-paths && gh-pages -d public"
我可以做些什么来使我的路由工作?
【问题讨论】:
标签: deployment gatsby github-pages reach-router dynamic-routing