Reputation: 198
"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
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
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
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