1290年了,使用TypeScript来代替Javascript来构建我们的前后端应用,已经在社区达成共识,去年在新浪移动大前端团队,也积极的投入到了TypeScript的学习和开发之中来。
经过大概半年多的业务迭代,我们内部从一开始就计划开发一款拥有完整TypeScript开发体验的Nodejs Web框架。
经过几个版本的迭代后,我们终于开源了团队的内部web框架,Daruk。
Daruk是一款基于 Koa2,使用 typescript 开发的轻量级 web 框架。使用过 koa2 框架的朋友应该知道,koa2 属于比较原始和基础的 http server 实现,在日常的开发工作中,我们可能需要通过安装很多开源的中间件,自己完成复杂的项目配置,路由管理,以及和业务无关的工作:如日志,监控,性能等基础组件的定制。
目前内部已经有大概10几个web项目在使用Daruk来构建了,比如下面这个c端的产品:
手机新浪网的高清图整站(目前落地页100% Daruk,使用TypeScript开发),频道首等其他页面还在灰度中(原来是PHP项目),流量一天1500-2000万,QPS峰值700多。
Daruk自身的定位是Koa2的上层封装,所以团队中熟悉Koa开发和TS的都可以直接无门槛上手,基于约定的目录配置和周边的一些内部扩展(内部一些基础扩展还未全部开源),目前我们大前端团队已经开始承接手机新浪网的BFF层开发。
回到框架本身,在一开始去年设计的时候我们还不知道有nestJs还有midwayjs这些优秀框架,今年了解到之后,我们后期也会借鉴和吸收他们的一些特性和优点进行改进。
但是Daruk的Goal,从一开始的定位和之后的定位都不会变:轻巧的,易扩展的,面向对象式的MVC web框架,并拥有TS的完整开发体验。
Daruk这个名字是我起的,当时沉迷塞尔达传说不能自拔,你看就是这个家伙:
当然,Daruk上手也非常简单,我们也提供了对应的脚手架工具,帮助不熟悉ts的同学可以快速玩起来:
下面是一个常见的 Koa 服务代码:
// index.js
const Koa = require("koa");
const app = new Koa();
app.use(async ctx => {
ctx.body = "Hello World";
});
app.listen(3000);
转换成 Daruk 编写的例子如下:
// src/index.ts
import { Daruk } from "daruk";
let app = new Daruk("myapp", {
rootPath: __dirname, // 指定 autoloader根目录
debug: true // 开启调试模式
});
app.run(3000);
controllers的定义:
// src/controllers/index.ts
import { BaseController, Context, get } from "daruk";
export default class Index extends BaseController {
@get("/")
public async index(ctx: Context, next: Function) {
ctx.body = "Hello world";
}
}
更多详细使用方法,可以参考文档:
最后,由于目前项目刚刚开源,网站的文档核心部分已经编写完成,但是后边的框架设计和最佳实践还没有全部完善,近期几周会以单独文章的形式投稿在我们自己的前端专栏,同时也希望喜欢TS的Nodejs开发者们多多支持,一起参与。
:)