Ale*_*ard 3 heroku environment-variables node.js
我有一个使用dotenv包的项目将我的环境变量加载到我的NodeJS应用程序中,我使用以下行
var dotenv = require('dotenv').load({ silent: true });
//Example of use
username: process.env.CONVERSATION_USERNAME
Run Code Online (Sandbox Code Playgroud)
我现在计划在Heroku上部署此应用程序。但是,出于某些明显的安全原因,我不想提交.env文件。
我是NodeJS的新手,我想知道是否可以说“如果.env文件不存在,请从Heroku加载环境变量”
谢谢,Alexi
小智 10
我在本地 NodeJS 设置和环境变量以及部署到 Heroku 时遇到了同样的问题。
我的解决方案是创建一个配置文件来处理这两种情况,并在我的项目中为我提供一个整洁、自动化的方法。
我的 NodeJS 服务器使用 运行babel-node,所以我的配置文件是用 ES6 编写的,您可能需要根据自己的需要进行转换。
如果我们以 .env 文件为例:
NODE_ENV=development
API_ENDPOINT=http://localhost:7000
SOMETHING_ELSE=some-text
Run Code Online (Sandbox Code Playgroud)
我config.js在 NodeJS 应用程序的根目录中:
import dotenv from 'dotenv';
const result = dotenv.config();
const envs = result.parsed;
module.exports = envs;
Run Code Online (Sandbox Code Playgroud)
您可以在我的代码中看到,我使用了 DotEnv 并创建了一个envs变量:let envs. 在本地,我使用 DotEnv 解析我的 .env 文件并将其作为对象传递给我的应用程序。
这意味着我可以.env轻松地从我的应用程序中导入我的变量:
import { NODE_ENV } from './config';
Run Code Online (Sandbox Code Playgroud)
在 Heroku 中,您可以在 Heroku 仪表板中项目的设置页面中设置环境变量。因此,为了避免将您的 .env 作为固定变量提交到您的存储库中(您永远不应该这样做),您可以process.env在同一个配置文件中访问全局变量。
所以你的config.js文件变成:
import dotenv from 'dotenv';
import _ from 'lodash';
const result = dotenv.config();
let envs;
if (!('error' in result)) {
envs = result.parsed;
} else {
envs = {};
_.each(process.env, (value, key) => envs[key] = value);
}
module.exports = envs;
Run Code Online (Sandbox Code Playgroud)
因为我的项目中已经有 lodash 可用,所以我用它来处理process.env变量的循环。
注意:这使您的 dyno 中的每个 env 变量都可用,而不仅仅是您在 Heroku 仪表板中设置的变量。您可能决定要为您的 env 加上前缀,并将
process.env循环过滤为您想要向应用程序公开的变量。
正如您在我的新配置文件中看到的,如果 DotEnv 运行时没有错误,那么我们可以假设存在一个 .env 文件并使用该文件中的变量并像我们之前所做的那样设置它们。
但是,如果有错误,那么我们假设没有.env文件,并回退到检查process.env我们然后将envsvar 设置为一个对象envs = {};,然后将我们找到的每个变量设置process.env为一个键值对。然后envs正常导出。
这使得 Heroku 的 env 变量在您的应用程序中可用,而无需在整个应用程序中更改逻辑。
希望这可以帮助任何有同样问题的人。
不要将.env提交给git(即,它应该在您的.gitignore中)。
您可以通过Heroku仪表板或heroku config:set在Heroku上定义env var,例如
heroku config:set CONVERSATION_USERNAME=Alex
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参见此处。
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |