【多图】模仿 egg.js 使用 koa2 搭建项目(一)

koajs 做为一个很是优秀的框架,正在慢慢的替代 expressjs,虽然 expressjs 宝刀未老,不论是各个框架的 cli, 仍是其余地方都依然坚挺着,但是就像 jQuery 同样,大半江山正在慢慢的失守,为了能继续在公司看天花板,仍是赶忙先学起来先。html

第一次来这里写文章,写的很差,求轻喷node

前言

最开始学 koa,惊讶其简洁,甚至是简陋的语法,以为本身好像什么都能干,但是好像又什么也干不了。python

其中最头疼不是其洋葱模型,而是经常使用的组件,好比路由和session就有好几个推荐的,官方也调皮,一次维护两,视图组件如今都是本身瞎写凑合着用,我的项目没人管,随便瞎搞了。git

后面接触了基于 koa 开发的框架 egg.js ,文档的质量很是好,让我这种 node 小白有眼前一亮的感受。github

不事后续在编写一些简单的小应用,好比相似微信中控服务器,职责比较单一的小应用,就感受有点鸡肋了,用了过于臃肿,不用又没信心能维护好这一个应用,因此就本身研究 egg.js 经过模仿,慢慢的搭建属于本身的一套模板出来。web

第一步:拓展 KoaApplication 类

注意:这步拓展不是必须的,只是这样使用会更加方便而已express

后续须要用到一个 baseDir 的参数,这个是项目的根路径,默认为 process.cwd() 的值。npm

之因此须要这个,主要是用于约定的目录查找,好比配置文件目录的自动查找用,并且有了这个参数,用于能够自定义应用路径,这个在其余框架,好比 python 的 flask 就比较能表明性的突出这个参数的重要性。json

参考实现flask

第二步:解决不一样环境的配置问题

参考 egg.jsconfig 介绍,实际上 egg 是经过维护 serverEnv 来实如今不一样环境下加载不一样的配置文件。同时,经过维护一个专门的环境变量 EGG_SERVER_ENV 来实现自定义加载配置文件的目的。

好比我有三个环境,分别是生产环境,本地开发环境和测试环境,那么对应的配置文件就是 config.prod.jsconfig.local.jsconfig.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 文件里面引入了 huskylint-staged 来进行本地代码检查,使用 npm version 来管理软件版本和 git tag 的自动生成,使用 standard ( standard 最新版已集成 eslint ) 来格式化 js 代码

nodemon.json

之前我用 supervisor 的,这个第一次用,还挺好用的 (●ˇ∀ˇ●),就是还没试过 js api,json 配置不够灵活,使用 js 就没这问题。

pm2.config.js

由于语言组织能力比较差,因此以图片代替,代码后面等整理后再上传。

看到掘金这么多推 vs 插件的,我也来推个,应该不少人都推过了,如下插件 是 webstorm 迁移 vscode 必备插件,下降适应时间

下一篇:灰机地址

相关文章
相关标签/搜索