差不多一年前,发布了 loon 1.0,这个是当时在 cnode 的介绍帖子:https://cnodejs.org/topic/59214033ba8670562a40f314 。在公司内部的小项目里用的很欢,也没有遇到什么大的问题。后来最近阴差阳错了解到 fastify, 也加入了他们社区,给了我更新的动力。花了一个多月时间在loon中加入了 fastify 的支持,也引入了一些新的功能,和大家分享一下。
Fastify 支持
原来 loon 是基于 experss 写的,因为 fastify 的性能太强大了,甚至和原生的 node.Server 差不多,这太吸引人了。
数据说话:
Fastify:31634 req/sec,
Koa:22737 req/sec,
Express:19401 req/sec
那在新的 loon 里面,你可以通过 ApplicationLoader
来指定你要的服务器类型,或者是 express 或者是 fastify, 还可以是 express 或者是 fastify 初始化后的实例。这样能够方便的集成到现有的项目中去,渐进式开发 :)
new ApplicationLoader('fastify', {rootDir: __dirname}).start() // 指定了fastify 服务器
或者
const fastify = require('fastify')({
logger: true
})
new ApplicationLoader(fastify, {rootDir: __dirname}).start() // 指定了fastify 服务器的实例
express同样的用法
create-loon-app
开发一个ts的项目,一开始挺麻烦的。要引入tsconfig,要引入一堆开发依赖,配置 hot reload,再加上 loon 本身需要的配置,可能在一开始就给项目增加了挑战。为了简化开发,我新写了一个命令行工具 create-loon-app
。没错就是照着 create-react-app
抄的,有了这个工具,初始化一个 loon 项目只要两步。
$ npm i -g create-loon-app
$ create-loon-app <appName>
初始化完成后
$ cd <appName>
$ npm start // 提供了集成 ts-node 和 nodemon 的命令,可以做到 hot reload 和 chrome inspect
就可以在浏览器访问 http://localhost:9000 看到 hello world 的回复了。
优雅关闭
新的 loon 自带graceful shutdown,并且提供了一个新的钩子,可以用这个钩子来关闭其他资源,比如数据库, redis 等等。
重写测试
这个并不是什么新的功能,因为引入了 fastify 的支持,增加测试是少不了的,再加上因为 loon 框架自动注册 controller 和 component 的特性,给原来测试带来了不小的麻烦。所以我索性用 ava 替代了原来的 mocha 重写了全部测试。 新的测试用例只要写一遍,就会自动的在 express 和 fastify 环境中各跑一次。有兴趣的同学可以参考 https://github.com/loon-project/loon/blob/master/test/util.ts
其他
当然还有其他一些小的改动,可以参看 https://github.com/loon-project/loon 上面的 changelog。
最后欢迎 star 和 fork。
mark
支持,不过和nest.js差不多,
支持,但是还是希望多给 nest.js 提交点 PR 吧