为什么我的自定义 process.env 在 dotenv 中不起作用?
Why are my custom process.env not working within dotenv?
了解到包含 API 密钥是一种不好的做法,我做了一些研究并尝试学习如何创建自定义 process.env
。
看完后:
- Node.js Everywhere with Environment Variables!
- How to set NODE_ENV to production/development in OS X
我正在尝试根据 process.env.NODE_ENV
在本地设置一个 env 文件。该应用程序将托管在 Heroku 上,在我的 .gitignore 中我有 dev.env
,但是当我尝试在本地使用 dotenv
时,我得到一个 undefined
。我在我的终端中使用 export NODE_ENV=development
在本地设置了环境。当我 运行 命令 npm start
或 nodemon
都 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 $var
但 process.env.var
给您未定义,那么请确保在创建变量时有 export
关键字。
export var="value"
了解到包含 API 密钥是一种不好的做法,我做了一些研究并尝试学习如何创建自定义 process.env
。
看完后:
- Node.js Everywhere with Environment Variables!
- How to set NODE_ENV to production/development in OS X
我正在尝试根据 process.env.NODE_ENV
在本地设置一个 env 文件。该应用程序将托管在 Heroku 上,在我的 .gitignore 中我有 dev.env
,但是当我尝试在本地使用 dotenv
时,我得到一个 undefined
。我在我的终端中使用 export NODE_ENV=development
在本地设置了环境。当我 运行 命令 npm start
或 nodemon
都 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 $var
但 process.env.var
给您未定义,那么请确保在创建变量时有 export
关键字。
export var="value"