koajs 做为一个很是优秀的框架,正在慢慢的替代 expressjs,虽然 expressjs 宝刀未老,不论是各个框架的 cli, 仍是其余地方都依然坚挺着,但是就像 jQuery 同样,大半江山正在慢慢的失守,为了能继续在公司看天花板,仍是赶忙先学起来先。html
第一次来这里写文章,写的很差,求轻喷node
最开始学 koa,惊讶其简洁,甚至是简陋的语法,以为本身好像什么都能干,但是好像又什么也干不了。python
其中最头疼不是其洋葱模型,而是经常使用的组件,好比路由和session就有好几个推荐的,官方也调皮,一次维护两,视图组件如今都是本身瞎写凑合着用,我的项目没人管,随便瞎搞了。git
后面接触了基于 koa 开发的框架 egg.js ,文档的质量很是好,让我这种 node 小白有眼前一亮的感受。github
不事后续在编写一些简单的小应用,好比相似微信中控服务器,职责比较单一的小应用,就感受有点鸡肋了,用了过于臃肿,不用又没信心能维护好这一个应用,因此就本身研究 egg.js 经过模仿,慢慢的搭建属于本身的一套模板出来。web
注意:这步拓展不是必须的,只是这样使用会更加方便而已express
后续须要用到一个 baseDir
的参数,这个是项目的根路径,默认为 process.cwd()
的值。npm
之因此须要这个,主要是用于约定的目录查找,好比配置文件目录的自动查找用,并且有了这个参数,用于能够自定义应用路径,这个在其余框架,好比 python 的 flask
就比较能表明性的突出这个参数的重要性。json
参考实现flask
参考 egg.js 的 config 介绍,实际上 egg 是经过维护 serverEnv 来实如今不一样环境下加载不一样的配置文件。同时,经过维护一个专门的环境变量 EGG_SERVER_ENV 来实现自定义加载配置文件的目的。
好比我有三个环境,分别是生产环境,本地开发环境和测试环境,那么对应的配置文件就是 config.prod.js
,config.local.js
,config.testing.js
, 由于测试环境 egg 没有提供支持,咱们能够经过给环境变赋值 export EGG_SERVER_ENV=testing
的方式来支持测试环境的配置。
egg 还支持 .env
文件的读取,能够经过其添加自定义环境的支持, serverEnv 的源码能够看这里.
这里若是是通用的配置文件,能够建立一个 config.default.js
的文件,将公共配置写在这里,这里的配置会和当前环境的配置合并,成为最终的配置文件,合并规则能够看这里。
参考实现
注意:这里的只是贴出魔改的核心代码,其余代码截图时屏蔽了
由于存在多个配置来源,因此为了方便查找问题,egg 会生成 application_config_meta.json 文件,用于定位配置的来源,config meta d的生成可看源码
这里仅仅是参考 eggjs 的目录结构,并无强约定,由于不想过重了,若是真的须要,直接使用 eggjs 会更好。
应用的入口文件和服务的启动脚本文件是我按本身的想法分开的,主要是用于分离本地开发引入的插件和线上运行的插件,好比本地开发能够引入 mockjs 和 代理插件,写个中间件在bin/local
挂载 文件那里,这样生产环境中只要接口删除就不用去处理开发的代码了
app.js
bin/serve
local 只是添加了开发依赖的插件而已,启动逻辑同样
app/router.js
site.js 适用于渲染官网页面的
配置文件编写可参考 egg.js,和其的用法保持一致,这样就不用写文档了,机智如我(●ˇ∀ˇ●)。
开发使用 nodemon 来启动服务,生产环境我是使用 pm2 来启动服务的。
package.json
package.js 文件里面引入了 husky 和 lint-staged 来进行本地代码检查,使用 npm version
来管理软件版本和 git tag 的自动生成,使用 standard ( standard 最新版已集成 eslint ) 来格式化 js 代码
nodemon.json
之前我用 supervisor 的,这个第一次用,还挺好用的 (●ˇ∀ˇ●),就是还没试过 js api,json 配置不够灵活,使用 js 就没这问题。
pm2.config.js
由于语言组织能力比较差,因此以图片代替,代码后面等整理后再上传。
看到掘金这么多推 vs 插件的,我也来推个,应该不少人都推过了,如下插件 是 webstorm 迁移 vscode 必备插件,下降适应时间
下一篇:灰机地址