1
"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

I have searched every where on the Internet, but no help.

Any help is appreciated.

Roshan Raj
  • 173
  • 2
  • 10

3 Answers3

1

The dotenv NPM package loads a file called .env by default, but this behaviour can be overriden. 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' })
}
1

You can only set node env in npm script. to import file you need to write code on your server file.

import dotenv in your server file

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

use below code to import particular env file.


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];
  }
Vipin Yadav
  • 947
  • 4
  • 13
0

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)",
}