【问题标题】:Why does Gatsby Source Filesystem not recognize environment only ignore during npm start?为什么 Gatsby 源文件系统在 npm 启动期间无法识别环境仅忽略?
【发布时间】:2021-08-21 17:35:08
【问题描述】:

阅读如何在构建时排除目录我在 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` && [`*`],
  },
},

它抛出一个终端错误:

“gatsby-source-filesystem”的插件选项无效:

  • “忽略”必须是一个数组

我在 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: [`*`],
  },
},

我正在阅读“How to unpublish a gatsby page without deleting it?”这导致我提出这个问题。仅使用npm run develop 处理npm run build 没有问题。在 Gatsby 开发中,有没有办法在环境条件下使用忽略?

【问题讨论】:

    标签: gatsby environment dotenv


    【解决方案1】:

    我不知道确切的原因,但我在使用不同的插件时遇到了同样的问题(比如为不同的环境或类似的东西生成不同的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` && [`*`]

    【讨论】:

      猜你喜欢
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多