Roshan Raj
Roshan Raj

Reputation: 198

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

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

Any help is appreciated.

Upvotes: 1

Views: 1255

Answers (3)

Vipin Yadav
Vipin Yadav

Reputation: 1113

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];
  }

Upvotes: 1

Simon Lutterbie
Simon Lutterbie

Reputation: 167

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

Upvotes: 0

Spherical Flying Kat
Spherical Flying Kat

Reputation: 91

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' })
}

Upvotes: 1

Related Questions