[英]Is it possible to use environment variables from .env package in the npm scripts
[英]Load .env environment variables when running npm task
假設我們有一個.env
文件,其中指定了一些變量:
AWS_PROFILE=hsz
ENVIRONMENT=development
還有一個簡單的npm
任務定義:
{
"name": "project",
"version": "0.0.1",
"scripts": {
"deploy": "sls deploy"
}
}
但是npm run deploy
忽略我們的.env
定義。
它可以通過better-npm-run
解決,例如:
{
"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
代理所有任務?
有點難看,但你可以嘗試這樣的事情:
"scripts": {
"deploy": "export $(cat .env | xargs) && sls deploy"
}
這將在運行sls deploy
之前從.env
文件中導出所有環境變量。
在這個答案中,這種技術有一些變化。
不是很干凈,但它避免了使用額外的模塊。
在執行 npm 腳本之前,您可以使用env-cmd npm 包設置從 .env 文件加載的環境變量。
npm i env-cmd -D
{
"scripts": {
"deploy": "env-cmd sls deploy"
}
}
在項目本身中維護和加載所有特定於環境的配置。
開發者.js
module.exports = {
"host":"dev.com"
}
產品.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);
包.json
{
"name": "project",
"version": "0.0.2",
"scripts": {
"deploy": "sls deploy"
}
}
運行你的 node.js 代碼 Prod 環境ENV=prod npm run deploy
; 開發環境 - npm run deploy
;
在./config.js
默認環境設置為dev
使用這個簡單的實踐,您不需要任何 npm 模塊來管理您的環境配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.