簡體   English   中英

運行 npm 任務時加載 .env 環境變量

[英]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 文件加載的環境變量。

  1. 將包添加到您的 package.json devDependencies:
npm i env-cmd -D
  1. 在 package.json 中使用 env-cmd 程序為您的 npm 腳本添加前綴:
{
  "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM