9

使用Daruk和TypeScript构建你的Nodejs应用

 3 years ago
source link: https://zhuanlan.zhihu.com/p/63900467
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用Daruk和TypeScript构建你的Nodejs应用

前端开发话题下的优秀回答者

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";
  }
}

更多详细使用方法,可以参考文档:

安装 | Daruk​daruk-framework.github.io

最后,由于目前项目刚刚开源,网站的文档核心部分已经编写完成,但是后边的框架设计和最佳实践还没有全部完善,近期几周会以单独文章的形式投稿在我们自己的前端专栏,同时也希望喜欢TS的Nodejs开发者们多多支持,一起参与。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK