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 相关文章推荐
JavaScript DOM 学习第三章 内容表格
Feb 19 Javascript
jQuery实现图片信息的浮动显示实例代码
Aug 28 Javascript
setTimeout()递归调用不加引号出错的解决方法
Sep 05 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 Javascript
JS实现图片切换特效
Dec 23 Javascript
Javascript如何实现扩充基本类型
Aug 26 Javascript
微信小程序使用前置摄像头拍照
Oct 22 Javascript
让你30分钟快速掌握vue3教程
Oct 26 Javascript
全面解析js中的原型,原型对象,原型链
Jan 25 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缓存技术的使用说明
2011/08/06 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
js 作用域和变量详解
2017/02/16 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
pytorch实现查看当前学习率
2020/06/24 Python
Python下载的11种姿势(小结)
2020/11/18 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
农行实习自我鉴定
2013/09/22 职场文书
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
单位介绍信格式范文
2015/05/04 职场文书
孙振耀退休感言
2015/08/01 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
python字符串的一些常见实用操作
2022/04/06 Python
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库