轻量级 Node.js Web 框架 Daruk2.0 正式版发布了!
推荐一个开源的轻量级 Node.js Web 框架 Daruk,作者 @小爝,文末阅读原文可在 Github 进行关注,正文从下面开始~
Daruk 是一款基于 Koa2,使用 Typescript 开发的轻量级 web 框架。Daruk 的初衷是让人们可以更方便的开发 Nodejs Web 应用并能够体会到 Typescript 编程的乐趣。Daruk 本身 100%基于 Typescript 开发,使用 inversifyjs 的 IoC 容器管理依赖,让开发者享受最佳的 OOP 和 IoC 的编程体验。
Daruk1.0 发布的时候,我们提供了基于 Koa 的约定格式模块加载机制,并使用了 Typescript 来重构了内部的 Daruk 版本,但是我们发现在使用的过程中(1年多)的时间里,按照目录约定和脚手架的开发方式,还是会给开发者带来诸多不便,并且框架并没有那么的 ts 化味道。
所以我们针对上面的问题,在经过使用 InversifyJS 重构后的2.0,今天终于正式发布了。
安装和使用 Daruk2.0会将非常的方便,新手入门也很容易,可以让开发者,尤其是 koa 开发者更方便的体会到 ts 编写后端代码的便利。
如果你没有接触过 nestjs,但是你又想使用 IoC 编程模型来进行后端 nodejs 业务开发,Daruk2.0是你一个很好的起点和开始。
npm add daruk ts-node typescript
安装完毕后,配置 tsconfig 文件:
{
"compileOnSave": true,
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"sourceMap": true,
"outDir": "./build",
"rootDir": "./src",
"typeRoots": [],
"types": [],
"experimentalDecorators": true,
"emitDecoratorMetadata": true
},
"exclude": ["node_modules"],
"include": ["./src/**/*.ts"]
}
使用 daruk 编写 web 服务:
import { DarukServer, controller, get, DarukContext } from "daruk";
(async () => {
const myapp = DarukServer();
@controller()
class Index {
@get("/")
public async index(ctx: DarukContext) {
ctx.body = "hello world";
}
}
await myapp.binding();
myapp.listen(3000);
})();
编写 npm script:
{
"scripts": {
"dev": "ts-node --project tsconfig.json --files src/index.ts",
"build": "tsc"
}
}
有哪些更新?
内置了 koa-body,不再需要集成外部中间件。使用 InversifyJS 进行重构,对外暴露大量装饰器对开发者类提供能力。新增内置了多个 request 和 response 链路的方法装饰器。提供了 plugin 插件的机制,内部 build_in 的大部分模块也是基于插件开发的。简化了 API 和目录约定方式,不再依赖 daruk-cli,可以更方便的自己定制脚手架和开发目录。完善了教程文档和 typedoc。
- oracle: job使用
- velocity模板引擎学习(2)-velocity tools 2.0
- java:如何用代码控制H2 Database启动
- 游戏开发完整学习路线(各个版本都有)
- spring mvc4:异常处理
- TCP/IP, WebSocket 和 MQTT
- struts2: 玩转 rest-plugin
- 设置系统环境变量立即生效的VBS脚本
- velocity模板引擎学习(1)
- mybatis 3.x 缓存Cache的使用
- XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
- mac: vmware fusion中cent os启动假死的解决办法
- java:hibernate + oracle之坑爹的clob
- 启用WCF NetTcpBinding的共享端口
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android设计模式之单例模式详解
- Android获取手机联系人的方法
- 学习使用Material Design控件(一)
- Android仿微信Viewpager-Fragment惰性加载(lazy-loading)
- Android嵌套滑动冲突的解决方法
- Android应用图标上的小红点Badge实践代码
- 详解Android studio中正确引入so文件的方法
- Android ViewFlipper的详解及实例
- Android编程实现拍照功能的2种方法分析
- 在Ubuntu/Linux环境下使用MySQL开放/修改3306端口和开放访问权限
- 10大HBase常见运维工具整理小结
- Android实现扫一扫识别数字功能
- 通过SSH连接本地linux虚拟机的过程记录
- 实现Android 获取cache缓存的目录路径的方法
- Android 消息分发使用EventBus的实例详解