Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果缺少环境变量,则盖茨比生成失败_Javascript_Environment Variables_Gatsby_Dotenv - Fatal编程技术网

Javascript 如果缺少环境变量,则盖茨比生成失败

Javascript 如果缺少环境变量,则盖茨比生成失败,javascript,environment-variables,gatsby,dotenv,Javascript,Environment Variables,Gatsby,Dotenv,我曾尝试使用.env.development和.env.production文件将环境变量添加到我的盖茨比项目中,效果非常好 如果缺少一个环境变量,我希望构建失败,但是我似乎不知道如何启用此功能 我已经通读了这本书,但似乎看不出这是怎么回事?这可能吗 我相信它使用了dotenv/webpack来定义引擎盖下的插件。我在盖茨比上也找不到内置的解决方案。您可以手动完成,但仍然不太容易 第一个问题:如果您想在运行npm脚本时从文件加载您的环境;它不能立即加载。但是您可以触发一个脚本文件,它可以在检查之

我曾尝试使用
.env.development
.env.production
文件将环境变量添加到我的盖茨比项目中,效果非常好

如果缺少一个环境变量,我希望构建失败,但是我似乎不知道如何启用此功能

我已经通读了这本书,但似乎看不出这是怎么回事?这可能吗


我相信它使用了dotenv/webpack来定义引擎盖下的插件。

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

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

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

source./.env.development#此行将设置环境变量
如果[“$API_KEY”=92734987234998];然后
npm运行构建
fi
另一个问题出现了;一些开发人员可能想在windows上运行它。所以最好使用著名的包装

npm i交叉环境
然后一切就绪,添加您的
安全构建

  "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运行安全构建

在创建build.sh并安装新软件包时,这个解决方案对我来说太难了。也许有更干净的解决办法。我毕竟不是盖茨比大师。

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

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

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

// 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
我可以想象进一步定制它,例如,记录一个带有回退的变量的警告,而不是抛出一个内容源插件或主题所需的错误。希望这是一个有用的起点