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