为什么 Gatsby 源文件系统在 npm 启动期间不识别环境只忽略?

Why does Gatsby Source Filesystem not recognize environment only ignore during npm start?

阅读如何在 Gatsby issue 中的 运行 构建中排除目录,它指示忽略 gatsby-source-filesystem 中的目录,您可以根据 env 与:

{
  resolve: `gatsby-source-filesystem`,
  options: {
    path: `${__dirname}/content`,
    ignore: process.env.NODE_ENV === `production` && [`**/draft-*`]
  }
}

ref 但是当我尝试使用类似的方法时:

{
  resolve: `gatsby-source-filesystem`,
  options: {
    name: `designs`,
    path: `${__dirname}/src/designs/`,
    ignore: process.env.NODE_ENV === `production` && [`*`],
  },
},

它抛出一个终端错误:

Invalid plugin options for "gatsby-source-filesystem":

  • "ignore" must be an array

我在 gatsby-config.js 的顶部引入 dotenv 并使用:

require('dotenv').config({
  path: `.env.${process.env.NODE_ENV}`,
})

如果删除 env 条件,它会起作用:

{
  resolve: `gatsby-source-filesystem`,
  options: {
    name: `designs`,
    path: `${__dirname}/src/designs/`,
    ignore: [`*`],
  },
},

我正在阅读“”,这让我想到了这个问题。我在 npm run build 上使用 npm run develop 没有问题。在 Gatsby develop 中,有没有办法在环境条件下使用忽略?

我不知道确切的原因,但我在使用不同的插件时遇到了同样的问题(比如为不同的环境生成不同的 sitemap.xml 或类似的东西)。我通过在 module.exports 范围之外生成变量来绕过它,例如:

 require(`dotenv`).config({
   path: `.env.${process.env.NODE_ENV}`
 });
 
 let ignore= process.env.NODE_ENV === `production` ? [`*`] : [];
 
 module.exports = {
   plugins: [
     {
       resolve: `gatsby-source-filesystem`,
       options: {
         name: `designs`,
         path: `${__dirname}/src/designs/`,
         ignore: ignore,
       },
     },
   ]

根据需要调整三元条件以添加 process.env.NODE_ENV === `production` && [`*`]