气球 LOON 基于 typescript 的 node 框架发布2.0了
发布于 9 个月前 作者 vincent178 1019 次浏览 来自 分享

差不多一年前,发布了 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。

3 回复

支持,不过和nest.js差不多,

支持,但是还是希望多给 nest.js 提交点 PR 吧

回到顶部