【发布时间】:2019-12-04 09:25:34
【问题描述】:
了解到包含 API 密钥是一种不好的做法,我进行了一些研究并尝试了解如何创建自定义 process.env。
看完后:
- 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
我正在尝试根据process.env.NODE_ENV 在本地设置一个环境文件。该应用程序将托管在 Heroku 上,在我的 .gitignore 中我有dev.env,但是当我尝试在本地使用dotenv 时,我得到一个undefined。我已在终端中使用export NODE_ENV=development 在本地设置环境。当我运行命令npm start 或nodemon 都返回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 将是验证。如果有更好的方法请不吝赐教。
【问题讨论】:
-
你确定你正在运行带有“NODE_ENV=development node src/main.js”的节点服务器
-
我正在运行 nodemon 并在 app.js 中调用 console.log。调用 env.js 并记录 NODE_ENV 时,我得到了“开发”日志
-
我认为你应该像这样运行脚本:NODE_ENV=development nodemon main.js
-
@d337 我的理解是,如果设置了
export NODE_ENV=development,那么它应该与npm start或nodemon一起使用 -
另外,当在 app.js 中执行
console.log(process.env.NODE_ENV)时,终端会返回 development。
标签: node.js environment-variables local dotenv