关于node.js:为什么我的自定义process.env在dotenv中不起作用?

Why are my custom process.env not working within dotenv?

了解到包含API秘密密钥是一种不好的做法,我已经进行了一些研究,并试图学习如何创建自定义process.env

看完之后:

  • Node.js随处可见环境变量!
  • 如何在OS X中将NODE_ENV设置为生产/开发
  • 如何从NodeJS中的文件设置process.env?
  • dotenv文件未加载环境变量

我正在尝试基于process.env.NODE_ENV在本地设置环境文件。该应用程序将托管在Heroku上,并且在我的.gitignore文件中有dev.env,但是当我尝试在本地使用dotenv时,我会得到一个undefined。我在终端中使用export NODE_ENV=development在本地设置了环境。当我运行命令npm startnodemon都返回undefined,但是在env.js中,我得到的是Testing for: development,例如:

1
2
3
4
5
6
7
8
nodemon

[nodemon] 1.19.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node app.js`
Testing for: development
undefined

这是我所拥有的:

app.js:

1
2
const keys = require('./config/env')
return console.log(process.env.PORT)

config / env.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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:

1
2
## Port number to run Application
PORT=4321

但是在app.js中,当我使用return console.log(process.env.PORT)return console.log(keys.PORT)进行测试时,它们都记录为undefined,为什么?使用dotenv时,env.js似乎做错了。

澄清一下,我什至没有推送到Heroku,并且prod.env将成为验证。如果有更好的方法,请教育我。


重新阅读有关path的文档后,我已经弄清楚了哪里出了问题,例如:

1
require('dotenv').config({ path: '/full/custom/path/to/your/env/vars' })

更改后:

1
2
3
4
5
case 'development':
  require('dotenv').config({
    path: './dev.env'
  })
  break

至:

1
2
3
4
5
case 'development':
  require('dotenv').config({
    path: `${__dirname}/dev.env`
  })
  break

有用。所以我的错误是范围问题。无需设置const keys,因此只需使用require('./config/env'),我就可以访问任何自定义进程,例如:

1
process.env.CUSTOM

或在这种情况下将是:

1
process.env.PORT

来自app.js


Heroku不能在dotenv上运行。

在给定的Heroku应用程序的"设置"页面中,它包含一个名为" Config Vars"的内容:

例如

Heroku Config Vars

例如,如果代码要访问:process.env.NODE_ENV,则应在给定应用程序的" Heroku设置"页面中设置一个新的Config Var,并将其命名为NODE_ENV。设置所需的值,然后按保存。瞧做完了

dotenv的附加值通常用于在本地计算机上进行测试。


您好,请先使用switch(env.trim()),然后更改路径值path: './config/dev.env'。祝好运。


之所以会出现此错误,是因为您需要设置这些环境变量,因为那里没有.env文件,而在dev服务器上,dotenv使用.env文件为您设置了它。

您需要通过Web界面或heroku CLI设置这些变量。
此heroku文档将为您提供帮助。