简体   繁体   English

从 package.json 加载单独的.env

[英]Load separate .env from package.json

"start:dev": "set NODE_ENV=development&&nodemon ./bin/www",
"start:test": "set NODE_ENV=testing&&nodemon ./bin/www",

I have two separate.env files dev.env and test.env I want to load dev.env on npm run start:dev and load test.env on npm run start:test我有两个单独的.env 文件dev.envtest.env我想在 npm 上加载dev.env 运行 start:dev并在 npm 上加载test.env 运行 start:test

I have searched every where on the Internet, but no help.我在互联网上搜索了每个地方,但没有任何帮助。

Any help is appreciated.任何帮助表示赞赏。

The dotenv NPM package loads a file called .env by default, but this behaviour can be overriden. dotenv NPM package 默认加载一个名为.env的文件,但可以覆盖此行为。 So you can do something like:因此,您可以执行以下操作:

const { config } = require('dotenv')
if (process.env.NODE_ENV === 'development') {
    config({ path: '/full/path/to/your/dev.env' })
} else if (process.env.NODE_ENV === 'testing') {
    config({ path: '/full/path/to/your/test.env' })
}

You can only set node env in npm script.您只能在 npm 脚本中设置节点环境。 to import file you need to write code on your server file.要导入文件,您需要在服务器文件上编写代码。

import dotenv in your server file在您的服务器文件中导入 dotenv

import dotenv from "dotenv";
or
const dotenv = require("dotenv");

use below code to import particular env file.使用下面的代码导入特定的 env 文件。


let envConfig={}
if (process.env.NODE_ENV === "development") {
  if (fs.existsSync(".env.development")) {
    envConfig = dotenv.parse(fs.readFileSync(".env.development"));
  } 

} else if(process.env.NODE_ENV === "testing"){
 if (fs.existsSync(".env.test")) {
    envConfig = dotenv.parse(fs.readFileSync(".env.test"));
  } 
}

 for (const k in envConfig) {
    process.env[k] = envConfig[k];
  }

I believe this answer has a solution for you:我相信这个答案可以为您提供解决方案:

scripts: {
  "set-env:production": "export $(cat .production.env | grep \"^[^#;]\" |xargs)",
  "set-env:development": "export $(cat .env | grep \"^[^#;]\" |xargs)",
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM