Why are my custom process.env not working within dotenv?
Solution 1
I've figured where I was going wrong after re-reading the documentation regarding path
, example:
require('dotenv').config({ path: '/full/custom/path/to/your/env/vars' })
After changing:
case 'development':
require('dotenv').config({
path: './dev.env'
})
break
to:
case 'development':
require('dotenv').config({
path: `${__dirname}/dev.env`
})
break
it works. So my error was a scope issue. No need to set const keys
so just using require('./config/env')
I can access any custom processes, example:
process.env.CUSTOM
or in this case it would be:
process.env.PORT
from app.js
Solution 2
Hi at first use switch(env.trim())
, then change the path value path: './config/dev.env'
. Goodluck.
DᴀʀᴛʜVᴀᴅᴇʀ
Updated on July 27, 2020Comments
-
DᴀʀᴛʜVᴀᴅᴇʀ almost 4 years
Learning that it is a bad practice to include API secret keys I've done some research and trying to learn how to create custom
process.env
.After reading:
- Node.js Everywhere with Environment Variables!
- How to set NODE_ENV to production/development in OS X
- How to set process.env from the file in NodeJS?
- dotenv file is not loading environment variables
I'm trying to set an env file locally based on
process.env.NODE_ENV
. The application would be hosted on Heroku and in my .gitignore I havedev.env
but when I try to usedotenv
locally I'm getting anundefined
. I have set the environment locally withexport NODE_ENV=development
in my terminal. When I run the commandnpm start
ornodemon
both returnundefined
but in env.js I getTesting for: development
, example:nodemon [nodemon] 1.19.1 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node app.js` Testing for: development undefined
Here is what I have:
app.js:
const keys = require('./config/env') return console.log(process.env.PORT)
config/env.js:
const env = process.env.NODE_ENV console.log(`Testing for: ${env}`) try { switch(env) { case 'undefined': Error('Environment undefined, if local in terminal: export NODE_ENV=development') break case 'development': require('dotenv').config({ path: './dev.env' }) break case 'production': require('dotenv').config({ path: './prod.env' }) break default: Error('Unrecognized Environment') } } catch (err) { Error('Error trying to run file') }
config/dev.env:
## Port number to run Application PORT=4321
but in app.js when I test with
return console.log(process.env.PORT)
orreturn console.log(keys.PORT)
they both logundefined
, why? I seem to be doing something wrong in env.js when usingdotenv
.To clarify I'm not even pushing to Heroku yet and prod.env will be validation. If there is a better approach please educate me.
-
DᴀʀᴛʜVᴀᴅᴇʀ almost 5 yearsI know how to set in the CLI the issue is using the custom process in development. Think you’re misunderstanding the question. I can log the NODE_ENV so the error is from env.js to dotenv.
-
Aakash almost 5 yearsas I have looked,
config()
takes path to directory where file named .env is located. So that's one problem. What we do is replace .env with the file .env.<build_type> before build. -
DᴀʀᴛʜVᴀᴅᴇʀ almost 5 yearsAnd that is why in env.js I'm setting the path in
config
withpath: './dev.env'
. I may be doing this wrong but per the documentation that is the correct way to declare a file if not using.env
. -
maxbeatty over 4 yearsFor future reference, dotenv will return an error if it can't find or read the file you specify with the
path
option. We surface errors to help with debugging like this.