使用 --prefix-paths 将 gatsby 站点部署到 netlify

Deploy gatsby site to netlify with --prefix-paths

我正在尝试将使用 Gatsby 构建的博客站点部署到 Netlify。问题是,我想从 /blog 为网站提供服务。 按照文档,我更改了 gatsby-config.js 以包含 pathPrefix,如下所示:

module.exports = {
  pathPrefix: `/blog`,
  siteMetadata: {...},
  plugins: [...]
}

接下来,我更改了构建命令以包含 --prefix-paths:

gatsby build --prefix-paths

当我 运行 在本地使用 gatsby serve --prefix-paths 站点时,一切正常。但是,在我部署到 netlify 之后,该站点仍由 root / 而不是 /blog 提供服务。 我的 netlify.toml:

[build]
  Command = "npm run build"
  Functions = "lambda"
  Publish = "public"

构建命令来自 netlify.toml 运行 来自 package.json 的命令是这样的:

"build": "run-p build:**",
"build:app": "gatsby build --prefix-paths",
"build:lambda": "netlify-lambda build src/lambda",

我在这里错过了什么?我需要做一些其他配置来 netlify 什么的吗?

对于遇到相同问题的任何人。我能够通过将 public 文件夹中的所有文件复制到 "blog" 文件夹中来解决这个问题,如下所示:

"build": "run-p build:**",
"build:app": "npm run clean && gatsby build --prefix-paths && npm run move",
"build:lambda": "netlify-lambda build src/lambda",
"move": "cd public && mkdir blog | mv * blog"

我将移动命令添加到 package.json 并在构建后执行它。我不确定我是否应该这样做,但在做了一些研究之后(我也发现了一个开始这样做的人)我认为没关系。

现在文件是从“/blog”提供的,一切正常。

假设您已经有一个主站点 运行 并且您想将您的 gatsby 博客集成到其中。

  1. 在您的 gatsby 博客 gatsby-config.js 文件中,添加:
module.exports = {
  pathPrefix: `/blog`,
}
  1. 始终在您的 gatsby 博客中,在您网站的根目录创建一个 netlify.toml 配置文件:
[[redirects]]
  from = "/blog/*"
  to = "/:splat"

此重定向的原因是 --prefix-path 不会更改 gatsby 在构建目录中存储构建文件的位置。这会在您的博客链接(以 /blog 为前缀)和您的文件路径之间产生差异。所以你想告诉你的网站每个 url 前缀为 /blog 应该指向你的构建目录中的文件(在 / 路径下)。

  1. 在您的 main 站点中,还使用此重定向规则创建一个 netlify.toml 配置文件:
[[redirects]]
  from = "/blog/*"
  to = "https://my-gatsby-blog.netlify.app/:splat"
  status = 200

这会告诉您的主站点,对于以 /blog/.

开头的每个 url 路径,它应该重定向到您的 gatsby 博客