Node.js 运行npm任务时加载.env环境变量
假设我们有一个Node.js 运行npm任务时加载.env环境变量,node.js,npm,environment-variables,Node.js,Npm,Environment Variables,假设我们有一个.env文件,其中指定了一些变量: AWS_PROFILE=hsz ENVIRONMENT=development 还定义了一个简单的npm任务: { "name": "project", "version": "0.0.1", "scripts": { "deploy": "sls deploy" } } 但是runningnpm run deploy忽略了我们的.env定义 它可以通过更好的npm运行来解决,如: { "name": "proje
.env
文件,其中指定了一些变量:
AWS_PROFILE=hsz
ENVIRONMENT=development
还定义了一个简单的npm
任务:
{
"name": "project",
"version": "0.0.1",
"scripts": {
"deploy": "sls deploy"
}
}
但是runningnpm run deploy
忽略了我们的.env
定义
它可以通过更好的npm运行来解决,如:
{
"name": "project",
"version": "0.0.2",
"scripts": {
"deploy": "bnr deploy"
},
"betterScripts": {
"deploy": "sls deploy"
},
"devDependencies": {
"better-npm-run": "^0.1.1",
}
}
但这看起来像是一项开销——特别是当我们有10多项任务时
是否有更好的方法始终加载.env
,而不通过better npm run
代理所有任务?在项目本身中维护并加载所有特定于环境的配置
dev.js
module.exports = {
"host":"dev.com"
}
prod.js
module.exports = {
"host":"prod.com"
}
config.js-将基于process.env.env变量解析配置的主文件
const dev = require('./dev');
const prod = require('./prod');
let envObject = {};
const env = process.env.ENV || "dev";
switch(env) {
case 'prod':
envObject = prod;
break;
default:
envObject = dev;
}
envObject['ENV'] = env;
process.env = Object.assign(process.env,envObject); // Optional if you prefer to add them into process environment otherwise `require('./config')` where you need configuration.
module.exports = envObject;
index.js-每次项目启动时调用节点项目根文件
const config = require('./config');
console.log('config object => ',config.host);
package.json
{
"name": "project",
"version": "0.0.2",
"scripts": {
"deploy": "sls deploy"
}
}
运行node.js代码
产品环境ENV=Prod npm run deploy
;
开发环境-npm运行部署
默认环境在/config.js
使用这个简单的实践,您不需要任何npm模块来管理您的环境配置。有点难看,但您可以尝试以下方法:
"scripts": {
"deploy": "export $(cat .env | xargs) && sls deploy"
}
这将在运行sls deploy
之前从.env
文件导出所有环境变量
这项技术在中国有一些变化
不是很干净,但它避免了使用额外的模块。在执行npm脚本之前,可以使用npm包设置从.env文件加载的环境变量
将包添加到包中。json devdependency:
npm i env cmd-D
在package.json中为npm脚本添加env cmd程序前缀:
谢谢,但关键是要避免在npm run
前面加任何env变量;此外,如果运行sls deploy
,则会加载外部工具-noindex.js
。或者在项目根文件夹中创建一个.npmrc文件,并在其中设置变量。
{
"scripts": {
"deploy": "env-cmd sls deploy"
}
}