如何使用 Gatsby 将任意文件添加到 /public?

How do I add an arbitrary file to /public with Gatsby?

我想将一个文本文件添加到 /src 中,这样它在构建目录 (/public) 的根目录中始终保持不变。

在我的例子中,我需要为 Netlify 添加一个 _redirects file 以将子域重定向到自定义域。

运行 盖茨比 1.0 alpha。

不需要放在/src中。我只是直接将它添加到 /public

尽管它在 .gitignore 中,但我使用了 git add -f /public/_redirects,提交了它,并且成功了。它在构建期间不会被删除或覆盖。


另一种方法(我还没有测试过)是将文件复制到 /public 中的目标位置,作为 gatsby-[=22 中 post-build script 的一部分=].

聚会有点晚了。

最简单的方法是在您的项目根目录中添加 static 文件夹,然后将 _redirects 放入其中。然后,当您构建 Gatsby 时,它会自动拾取它并将其放置在 /public 文件夹中。

official docs

尽管这个问题得到了回答,但我找到了另一种方法来做到这一点,我想分享一下。只需在构建期间复制您的 _redirects 文件或任何文件,如下所示:

"build": "gatsby build && cp src/_redirects public/"

它会在您每次构建部署时复制您的文件。我希望这对某人有所帮助!

我通过安装 gatsby-plugin-copy-files-enhanced 插件并编辑 gatsby-config.js 解决了类似的问题,如下所示:

{
  resolve: `gatsby-source-filesystem`,
  options: {
    name: `extra`,
    path: `${__dirname}/src/extra`,
  },
},
{
  resolve: 'gatsby-plugin-copy-files-enhanced',
  options: {
    source: `${__dirname}/src/extra`,
    destination: '/',
    purge: false,
  },
},

注意:不要忘记将 _redirects 文件移动到 src/extra.

Gatsby now recommends using the ./static/ directory 用于将文件逐字复制到构建目标中。