nodeJS开发和生产环境配置文件加载
Posted
技术标签:
【中文标题】nodeJS开发和生产环境配置文件加载【英文标题】:nodeJS development and production environment config file loading 【发布时间】:2018-03-27 02:54:13 【问题描述】:基于这里https://***.com/a/22524056/777700的这个答案,我设置了完全相同的配置选项,但它不起作用。
我的(部分)app.js 文件:
console.log('environment: '+process.env.NODE_ENV);
const config = require('./config/db.json')[process.env.NODE_ENV || "development"];
console.log(config);
我的 ./config/db.json 文件:
"development":
"host":"localhost",
"port":"3306",
"username":"root",
"password":"",
"database":"dbname"
,
"production":
"host":"production-host",
"port":"3306",
"username":"user",
"password":"pwd",
"database":"dbname"
Console.log 输出:
environment: development
undefined
应用程序崩溃。知道为什么吗?文件在那里,如果我删除 require() 的 [...] 部分,它会打印出 db.json 文件,并打印出 undefined。
编辑
我试图在 require() 之后添加console.log(typeof config)
以查看我得到了什么,我注意到如果我require('./config/db.json')[process.env.NODE_ENV]
我得到undefined
,但如果我require('./config/db.json')["development"]
我得到正确的对象。
版本:
nodeJS 6.11.4
express 4.16.2
【问题讨论】:
请告诉我您正在尝试什么,因为您似乎还没有定义您的 NODE_ENV 环境值... 它应该在你的 bashrc 文件中,或者你可以喜欢这个NODE_ENV=development node app.js
【参考方案1】:
为此最好使用 dotenv 包
npm i dotenv
第 1 步:在 package.json 中添加这个
"scripts":
"start": "nodemon app.js",
"dev": "NODE_ENV=dev nodemon app.js"
"prod": "NODE_ENV=prod nodemon app.js"
,
第 2 步:添加 .env.prod 和 .env.dev 文件
.env.dev
PORT=7200
# Set your database/API connection information here
DB_URI=localhost
DB_USERNAME=root
DB_PASSWORD=password
DB_DEFAULT=dbName
第 3 步:在 config.js 中添加此内容
const dotenv = require('dotenv').config( path: `.env.$process.env.NODE_ENV` );
const result = dotenv;
if (result.error)
throw result.error;
const parsed: envs = result;
// console.log(envs);
module.exports = envs;
第 4 步:需要时像这样使用
const
DB_URI, DB_USERNAME, DB_PASSWORD, DB_DEFAULT,
= require('../config');
现在如果你想开发,运行
npm run dev
对于产品,使用
npm run prod
【讨论】:
【参考方案2】:经过更多的调试和在线搜索,我终于找到了解决方案。问题是我在 Windows 机器上使用npm run dev
命令,而我的“dev”命令看起来像SET NODE_ENV=development && nodemon server.js
。
有经验的人会注意到&&之前有一个空格,它在变量development
后面添加了一个空格,所以我要比较的变量是"development "
,而不是我想的"development"
.
因此,其他问题的原始答案确实有效,并且确实加载了正确的配置!
【讨论】:
【参考方案3】:如果你想通过 JSON 来做:
const fs = require('fs')
let localConfig
try
localConfig = JSON.parse((fs.readFileSync('./config/db.json', 'utf-8'))
catch (e)
console.log('Could not parse local config.')
localConfig = false
module.exports = localConfig
然后您可以为生产添加逻辑,如果没有本地配置 localConfig
将返回 false,您可以查找此时注入的环境变量。
更新:
我看到您自己提供了生产配置,在这种情况下,您可以根据环境访问所需的密钥。只需导入 localConfig
并使用您需要的密钥。
【讨论】:
【参考方案4】:您应该将配置导出为变量:
const config =
"development":
"host":"localhost",
"port":"3306",
"username":"root",
"password":"",
"database":"dbname"
,
"production":
"host":"production-host",
"port":"3306",
"username":"user",
"password":"pwd",
"database":"dbname"
;
module.exports = config;
这样就可以找到了:)
【讨论】:
只需使用 .js 扩展名以上是关于nodeJS开发和生产环境配置文件加载的主要内容,如果未能解决你的问题,请参考以下文章
webpack开发与生产环境 性能优化配置 - HMR - 缓存 -tree shaking - 代码分割 - 懒加载 - 预加载 - PWA - 多进程打包 - externals - dll(代码