为什么我的自定义 process.env 在 dotenv 中不起作用?

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

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

看完后:

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

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:

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

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

澄清一下,我什至还没有推送到 Heroku,prod.env 将进行验证。如果有更好的方法请不吝赐教

您收到此错误是因为您需要设置这些环境变量,因为我们那里没有 .env 文件,而在开发服务器上 dotenv 使用您的 .env 文件为您设置它。

您需要通过网络界面或 heroku CLI 设置这些变量。 This heroku doc 会帮助你。

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

Heroku 没有 运行 dotenv。

它在给定 Heroku 应用程序的设置页面中有一个名为 "Config Vars" 的东西:

例如

对于您的示例,如果代码想要访问:process.env.NODE_ENV,您将在给定应用程序的 Heroku 设置页面中设置一个新的 Config Var,并将其命名为 NODE_ENV。设置你想要的值,然后按保存。瞧。完成。

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

在重新阅读有关 path 的文档后,我发现我哪里出了问题,例如:

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

更改后:

case 'development':
  require('dotenv').config({
    path: './dev.env'
  })
  break

至:

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

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

process.env.CUSTOM

或者在这种情况下它将是:

process.env.PORT

来自app.js

如果您看到变量使用 echo $varprocess.env.var 给您未定义,那么请确保在创建变量时有 export 关键字。 export var="value"