Load .env environment variables when running npm task
假设我们有一个
1 2 | AWS_PROFILE=hsz ENVIRONMENT=development |
还定义了一个简单的
1 2 3 4 5 6 7 | { "name":"project", "version":"0.0.1", "scripts": { "deploy":"sls deploy" } } |
但runnning
它可以用
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "name":"project", "version":"0.0.2", "scripts": { "deploy":"bnr deploy" }, "betterScripts": { "deploy":"sls deploy" }, "devDependencies": { "better-npm-run":"^0.1.1", } } |
但这看起来像一个开销 - 特别是当我们有10个以上的任务时。
是否有更好的方法可以在不通过
有点难看,但你可以尝试这样的事情:
1 2 3 | "scripts": { "deploy":"export $(cat .env | xargs) && sls deploy" } |
这将在运行
在这个答案中,这个tehnique有一些变化。
不是很干净,但它避免使用额外的模块。
在执行npm脚本之前,可以使用env-cmd npm包设置从.env文件加载的环境变量。
1 | npm i env-cmd -D |
1 2 3 4 5 | { "scripts": { "deploy":"env-cmd sls deploy" } } |
在项目本身中维护和加载所有特定于环境的配置。
dev.js
1 2 3 | module.exports = { "host":"dev.com" } |
prod.js
1 2 3 | module.exports = { "host":"prod.com" } |
config.js - 将根据process.env.ENV变量解析配置的主文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 - 每次项目启动时节点项目根文件调用
1 2 | const config = require('./config'); console.log('config object => ',config.host); |
的package.json
1 2 3 4 5 6 7 | { "name":"project", "version":"0.0.2", "scripts": { "deploy":"sls deploy" } } |
运行node.js代码
产品环境
开发环境 -
默认环境在
使用这种简单的练习,您不需要任何npm模块来管理您的环境配置。