Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 运行npm任务时加载.env环境变量_Node.js_Npm_Environment Variables - Fatal编程技术网

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"
  }
}
但是running
npm 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
    ,则会加载外部工具-no
    index.js
    。或者在项目根文件夹中创建一个.npmrc文件,并在其中设置变量。
    {
      "scripts": {
        "deploy": "env-cmd sls deploy"
      }
    }