Node实战之不同环境下配置文件使用教程


Posted in Javascript onJanuary 02, 2018

前言

在使用 Node.js 编写一个完整的项目时,程序中往往需要用到一些可配置的变量,从而使得程序能在不同的环境中运行,而众所周知,在实际的项目会存在多个不同的环境,不同的环境下,一些配置是不相同的,如何在不同的环境下调用不同的配置,提高开发效率?下面话不多说了,来一起看看详细的介绍吧。

1. config-lite模块

首先引入一个配置模块config-lite,使用命令npm i config-lite --save安装。

通常我们会针对不同的环境,将配置写入不同的配置文件中,在Node项目下新建config目录,里面新建不同环境的配置文件,这里我以『开发』以及『生产』两个环境作为例子来讲解如何操作。

开发环境中,我们在config目录下新建两个文件:test.js和default.js,你可能会问,为啥没有生产机配置文件,因为生产机配置要在生产环境下再创建嘛。

在test.js配置文件中写入代码如下(PS. 这里以mysql的配置为例):

// test.js
module.exports = {
 mysql : {
 host: "localhost",
 user: "lupeng",
 password: "080910",
 database: "b1imd"
 }
};

default.js里写入一些默认的配置文件,例如session的配置等。

// default.js
module.exports = {
 mysql : {
 host: "10.20.141.220",
 user: "lupeng",
 password: "123456",
 database: "b1imd"
 },
 session: {
 secret: 'keyboard cat',
 resave: false,
 saveUninitialized: true,
 cookie: {
  maxAge: 1000*60*60
 }
 }
};

好了,配置文件写好了,如何使用呢?这里我们使用的 config-lite模块,这个模块是依据环境变量来选择不同的配置文件的,所以在使用之前我们需要修改package.json里的启动命令:

"scripts": {
 "start": "NODE_ENV=production supervisor --harmony -i views/ ./bin/www",
 "test": "NODE_ENV=test supervisor --harmony -i views/ ./bin/www"
 },

可以看到,上面有两条启动命令,一条是针对生产机,设置了NODE_ENV=production,一条是针对测试机,设置了NODE_ENV=test,当我们使用npm test启动项目的时候,config-lite会去抓取test.js配置,并且会与default.js里配置去合并,如果有相同的对象,会覆盖default.js里的配置。如上例子都有mysql的对象,那么这里会以test.js里的对象为准。

好了,下面来介绍一下如何在项目中使用config-lite模块,在app.js里代码如下:

// 省略...
var config = require('config-lite')(__dirname);
// 省略...
app.use(session(config.session));
console.log("mysql服务器:" + config.mysql.host); // display mysql-config
// 省略...

引入之后,可以直接使用配置文件中的配置对象。

2. 生产环境

那么在生产环境中,如何使用呢?上面已经介绍了config-lite基本原理以及用法,在生产环境的时候,我们只需要在生产机环境中config目录下新建production.js文件,然后使用启动命令npm start即可。

为了避免测试环境以及生产坏境配置文件混淆,可以通过.gitignore文件忽略配置文件,添加如下:

# config
config/*
!config/default.*

这样,git会忽略除了default.js之外的配置文件,在本地开发环境中,可以创建多个配置文件测试使用,只需设置对应的环境变量即可。需要注意的是环境变量名需同配置文件名一样。

3. windows环境

也许你是一个多系统环境开发者,可能同时在Linux和windows环境下开发,由于windows下设置环境的变量的语法不太一样,所以可以在package.json启动命令中再加上两句,如下:

"scripts": {
 "start": "NODE_ENV=production supervisor --harmony -i views/ ./bin/www",
 "test": "NODE_ENV=test supervisor --harmony -i views/ ./bin/www",
 "winStart": "SET NODE_ENV=production&&supervisor --harmony -i views/ ./bin/www",
 "winTest": "SET NODE_ENV=test&&supervisor --harmony -i views/ ./bin/www" 
 }

这样,如果部署在windows环境下,在config目录下新建production.js配置文件,启动命令npm winStart;如果部署在Linux或类Unix环境下,同样是创建production.js,启动命令npm start即可。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
Jun 22 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
Aug 12 Javascript
jQuery中mouseover事件用法实例
Dec 26 Javascript
js实现拖拽效果
Feb 12 Javascript
JavaScript:Array类型全面解析
May 19 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
Jan 11 Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 Javascript
使用jQuery操作DOM的方法小结
Feb 27 Javascript
微信小程序基于本地缓存实现点赞功能的方法
Dec 18 Javascript
vue-cli3 karma单元测试的实现
Jan 18 Javascript
Vue 实现把表单form数据 转化成json格式的数据
Oct 29 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 #jQuery
Node解决简单重复问题系列之Excel内容的获取
Jan 02 #Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
Jan 02 #Javascript
React教程之封装一个Portal可复用组件的方法
Jan 02 #Javascript
Node层模拟实现multipart表单的文件上传示例
Jan 02 #Javascript
10行原生JS实现文字无缝滚动(超简单)
Jan 02 #Javascript
js原生实现移动端手指滑动轮播图效果的示例
Jan 02 #Javascript
You might like
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
ext 代码生成器
2009/08/07 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
全面理解Python中self的用法
2016/06/04 Python
详解python配置虚拟环境
2019/04/08 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
Django REST 异常处理详解
2020/07/15 Python
利用python实现汉诺塔游戏
2021/03/01 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
领导的自我鉴定
2013/12/28 职场文书
社团文化节邀请函
2014/01/10 职场文书
十佳护士获奖感言
2014/02/18 职场文书
消防标语大全
2014/06/07 职场文书
博物馆观后感
2015/06/05 职场文书
感恩教师主题班会
2015/08/12 职场文书
小学感恩主题班会
2015/08/12 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书