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 绑定事件时传递参数的实现方法
Oct 13 Javascript
50个比较实用jQuery代码段
Sep 18 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
Oct 24 Javascript
jquery实现鼠标拖动图片效果示例代码
Jan 09 Javascript
js实现的map方法示例代码
Jan 13 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
Feb 07 Javascript
javascript判断数组内是否重复的方法
Apr 21 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
Oct 22 Javascript
小程序:授权、登录、session_key、unionId的详解
May 15 Javascript
微信小程序服务器日期格式化问题
Jan 07 Javascript
JS eval代码快速解密实例解析
Apr 23 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结合飞信 免费天气预报短信
2009/05/07 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
php之可变函数的实例详解
2017/09/13 PHP
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python实现复制整个目录的方法
2015/05/12 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
Python的log日志功能及设置方法
2019/07/11 Python
解决Python3 控制台输出InsecureRequestWarning问题
2019/07/15 Python
Python 元组操作总结
2019/09/18 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
学生思想表现的评语
2014/01/30 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
安全教育主题班会总结
2015/08/14 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
MySQL一些常用高级SQL语句
2021/07/03 MySQL