【问题标题】:Fail Gatsby build if environment variable missing如果缺少环境变量,则 Gatsby 构建失败
【发布时间】:2020-10-02 07:48:12
【问题描述】:

我已经尝试使用 .env.development.env.production 文件将环境变量添加到我的 Gatsby 项目中,效果很好。

如果缺少其中一个环境变量,我希望我的构建失败,但是我似乎看不到如何启用此功能。

我已经阅读了Gatsby environment variables documentation,但似乎看不出这是如何工作的?这可能吗?

我相信它在底层使用了 dotenv/webpack 定义插件。

【问题讨论】:

    标签: javascript environment-variables gatsby dotenv


    【解决方案1】:

    我确信还有其他方法可以做到这一点,但通过一些快速测试,这种方法似乎对我很有效。

    在您的 gatsby-config.js 文件中,您可以选择明确要求 dotenv,以便您可以在配置中使用这些环境变量。

    我添加了以下内容,现在 Gatsby 构建将失败,除非指定的环境变量存在。

    // Load the environment variables, per
    // https://www.gatsbyjs.org/docs/environment-variables/#server-side-nodejs
    require('dotenv').config({
      path: `.env.${process.env.NODE_ENV}`,
    })
    
    function checkEnv(envName) {
      if (typeof process.env[envName] === 'undefined' || process.env[envName] === '') {
        throw `Missing required environment variables: ${envName}`
      }
    }
    
    try {
      checkEnv('NODE_ENV')
      checkEnv('EXAMPLE_MISSING_ENV')
      checkEnv('EXAMPLE_API_KEY')
    } catch (e) {
      throw new Error(e)
    }
    
    // The rest of the config file
    

    我可以想象进一步定制这个,例如。为带有后备的变量记录警告,而不是为内容采购插件或主题所需的变量抛出错误。希望这对您有所帮助!

    【讨论】:

      【解决方案2】:

      我在 Gatsby 上也找不到内置解决方案。您可以手动完成,但仍然不太容易。

      第一个问题:如果你想在运行 npm 脚本时从文件中加载你的环境;它不能立即加载。但是你可能会触发一个脚本文件,它可以在你检查之前加载这个环境变量。

      让我们在项目的根目录上说build.sh

      source ./.env.development # this line will set env variables
      if [ "$API_KEY" = 927349872349798 ] ; then
        npm run build
      fi
      

      另一个问题出现了;一些开发人员可能想在 Windows 上运行它。所以最好使用著名的cross-env 包。

      npm i cross-env
      

      然后一切准备就绪,添加您的secure-build

        "scripts": {
          "build": "gatsby build",
          "develop": "gatsby develop",
          "format": "prettier --write \"**/*.{js,jsx,json,md}\"",
          "start": "npm run develop",
          "serve": "gatsby serve",
          "clean": "gatsby clean",
          "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1",
          "secure-build": "cross-env-shell \"./build.sh\""
        },
      
      

      然后运行它:

      npm run secure-build
      

      当我们创建了一个 build.sh 并安装了一个新包时,这个解决方案对我来说太过分了。也许有更清洁的解决方案。毕竟我不是盖茨比大师。

      【讨论】:

        猜你喜欢
        • 2022-11-02
        • 2020-01-29
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-05
        • 1970-01-01
        • 2021-07-09
        相关资源
        最近更新 更多