之前几篇的介绍都是针对某个功能点的介绍,当整个 web 应用变大后,一个清晰的工程目录结构和系统参数配置也是十分必要的。本篇主要目标的介绍koa2-web应用工程目录设计、环境变量/系统变量的配置,同时本篇也是对之前几篇介绍内容的一个整合。
一、工程结构设计
koa2-web应用目录结构设计
12345678910111213141516171819202122232425262728293031 koa2-web├──bin #应用启动相关配置文件路径| ├──dispatch.js #系统 cluster配置文件, 采用pm2启动应用不需要该文件| ├──worker.js # graceful配置文件, 采用pm2启动应用不需要该文件| ├──log.js #日志配置文件| └──app.js #koa2应用主文件,一般系统中间件在该文件中引入|├──public #系统静态文件路径| ├──common #放置公共文件,如:jQuery, favicon.ico| └── '''├──src #开发文件路径| ├──app #业务逻辑接口放置于本路径| ├──router #路由文件路径,所有http请求在次目录下处理| ├──lib #公共模块抽取置于此路径| ├──dao #持久层,该目录仅限于数据库操作| └──views #view层文件放置路径, 模板、js、css/less等文件| ├──layout 公共模板文件| └──'''├──config #配置文件路径| ├──dev.env.config.js #开发环境配置文件| ├──test.env.config.js #测试环境配置文件| ├──prod.env.config.js #开发环境配置文件| ├──log4js.json #log配置文件| └──package.config.js #打包配置文件(打包篇介绍)|├──logs #日志文件输出路径├──node_modules #node依赖路径,node引入依赖自动生成├──webpack.config.js # webpack打包配置文件(打包篇介绍)├──package.json #工程管理文件,系统依赖管理,启动命令、环境变量配置,├──.gitignore└──README.md
二、三套环境配置文件
一般而言,web系统开发的环境分为 “开发, 测试, 生产”三套环境, node 中可以通过设置系统变量 NODE_ENV 来判断koa 应用现在处于哪一套环境。
1、在上述工程结构中的dev.env.config.js, test.env.config.js, prod.env.config.js 三个文件主要是配置 web 应用在不同环境下的一些系统参数,例如:
123456789101112 //全局变量,系统侦听端口global.listen_port = 3000//redis配置let redisConfig = {port: 6379,host: '192.168.1.100',}//非全局变量 需要导出module.exports = {redisConfig: redisConfig}2、引入配置文件
1234567891011121314151617 //根据环境变量值,引入相应的配置.( NODE_ENV设置在下一节介绍 )//以这种方式引入,全局变量将生效//下面这段代码最好在koa.js执行前引入,例如置于app.js文件的最顶部if( process.env.NODE_ENV === 'development' ) {require('../config/dev.env.config')} else if( process.env.NODE_ENV === 'test' ) {require('../config/test.env.config')} else if( process.env.NODE_ENV === 'production' ) {require('../config/prod.env.config')}//非全局变量引入, 在需要使用的时候引入let redisConfig = require('../config/dev.env.config').redisConfigif( process.env.NODE_ENV === 'test' ) {const redisConfig = require('../config/test.env.config').redisConfig} else if( process.env.NODE_ENV === 'production' ) {const redisConfig = require('../config/prod.env.config').redisConfig}3、系统配置参数也可以像log的配置文件一样写成json文件,应如 依赖 config(npm i –save config) 解析json文件
三、应用启动命令配置
1、命令配置: 在 package.json 中的scripts 字段是配置node应用的各种脚本运行命令:例如
12345 "scripts": {"start": "export NODE_ENV='development' && node --harmony bin/dispatch.js","dpytest": "export NODE_ENV='test' && node --harmony bin/dispatch.js","dpyprod": "export NODE_ENV='production' && node --harmony bin/dispatch.js",}2、命令执行:
npm start:表示执行脚本 “export NODE_ENV=’development’ && node –harmony bin/dispatch.js”, 这个段脚本可以一分为二:
a、export NODE_ENV=’development’ 设置 node 环境变量为 ‘development’
b、node –harmony bin/dispatch.js node 运行脚本
npm run dpytest 和 npm run dpyprod则分别执行脚本”export NODE_ENV=’test’ && node –harmony bin/dispatch.js”和export NODE_ENV=’production’ && node –harmony bin/dispatch.js
注意: 非 start 的命令, 都需要加上 run, 不加 run 是 start 的特权。
3、使用pm2启动应用例子
12345 "scripts": {"pm2dev": "export NODE_ENV='development' && pm2 start bin/app.js --name serverdev -o logs/app.log && pm2 logs serverdev","pm2res": "pm2 restart serverdev","pm2del": "pm2 delete serverdev",},npm run pm2dev 启动服务
npm run pm2res 重启服务
npm run pm2del 删除进程
总结
之后的介绍将基于本篇介绍的结构工程结构, 且启动方式将基于pm2