I'm on NodeJs app, I've create two files:
.env
.env.production
on the first I have dev settings, on the later prod settings.
Now, running on local, I'd like to do this:
npm run jobs_orders
Configured this way within package.json:
"scripts": {
"job_orders": "supervisor --mode production jobs/job_orders.js",
},
But later on app, when doing:
import 'dotenv/config';
...
process.env.DATABASE_CONNECTION_STRING
it always read the DATABASE_CONNECTION_STRING
settings on .env file, not the one on env.production.
Where am I wrong? And how do I fix it?
Because dotenv
will load the environment variables located in path.resolve(process.cwd(), '.env')
by default.
You can set the process.env.NODE_ENV
variable to determine which .env
to load for different environments.
index.mjs
:
import { config } from 'dotenv';
import path from 'path';
const nodeEnv = process.env.NODE_ENV || '';
config({ path: path.resolve(process.cwd(), `.env${nodeEnv ? '.' + nodeEnv : ''}`) });
console.log('process.env.DATABASE_CONNECTION_STRING: ', process.env.DATABASE_CONNECTION_STRING);
.env
DATABASE_CONNECTION_STRING=dev
.env.production
DATABASE_CONNECTION_STRING=prd
Development:
$ node index.mjs
process.env.DATABASE_CONNECTION_STRING: dev
Production:
$ NODE_ENV=production node index.mjs
process.env.DATABASE_CONNECTION_STRING: prd
Reference:
Node version: v14.21.3