1.介绍
Daruk 是一款基于 Koa2,使用 Typescript 开发的轻量级 web 框架。Daruk 的初衷是让人们可以更方便的开发 Nodejs Web 应用并能够体会到 Typescript 编程的乐趣。Daruk 本身基于 100% 基于 Typescript 开发,使用 inversifyjs 的 IoC 容器管理依赖,让开发者享受最佳的 OOP 和 IoC 的编程体验。
一些基本概念:
koa:nodejs最权威的http模块之一,另一个是express
Typescript:js的超集,和js很像,可以参考这篇博客:小白入门typescript
IoC(Inversion of Control):字面意思是控制反转,具体定义是高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
举个例子:
类 A 直接依赖类 B,假如要将类 A 改为依赖类 C,则必须通过修改类 A 的代码来达成。这种场景下,类 A
一般是高层模块,负责复杂的业务逻辑;类 B 和类 C 是低层模块,负责基本的原子操作;假如修改类 A,会给程序带来不必要的风险。
解决方案:将类 A 修改为依赖接口 I,类 B 和类 C 各自实现接口 I,类 A 通过接口 I 间接与类 B 或者类 C
发生联系,则会大大降低修改类 A 的几率。
InversifyJs是一个轻量级的IoC容器,使用类构造函数来标识并注入其依赖项。
简单的理解,就是之前我们对类的使用和继承会相互引用嵌套,小项目还可以,但是一旦项目大一点,使用的类和依赖多一点,维护或修改起来就会非常麻烦。而InversifyJs会将我们所有的类(当然不仅仅只有类)全部放进container中进行统一维护。
DI:依赖注入(Dependency Injection其实和 IoC 是同根生,这两个原本就是一个东西,只不过由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以 2004 年大师级人物 Martin Fowler 又给出了一个新的名字:“依赖注入”。
类 A 依赖类 B 的常规表现是在 A 中使用 B 的 instance。
Daruk框架内部集成了许多方便灵活的装饰器函数,让开发者可以写更少的代码来完成更多的事情,Daruk2.0 更改了之前严格要求目录约定的范式,提供给开发者更灵活的操作空间来进行项目约束和编写,但是内置的功能并没有缺失,整个框架的开发能力和 Daruk1.0 持平。
比如在 Daruk2.0 中,我们可以使用装饰器来快速定义 service,controller,timer,middleware 等能力来编写 web 应用,且提供了一些基本的内置中间件和路由服务等,更灵活的定义,让 Daruk2.0 可以更灵活的定制你的 web 项目和编写测试脚本。
Daruk2.0 同样基于 koa2,目前包含以下核心功能:
- 开启装饰器配置,ts 环境下引入即用,无需脚手架等工具。
- 提供给开发者编写影响框架内部能力的插件机制
- 可以自定义目录结构,在启动时使用 API 加载你自己定义的源文件
- 完整的 typescript 开发体验
- 服务启动完整生命周期 hook
- 自定义 (性能日志 & 业务日志) 染色功能
- 支持线上实时性能分析
- 轻量级的链路追踪
- 面向对象的 mvc 开发体验
- 配套的一些周边模块
2.安装
2.1 安装node环境
可通过 NodeJs 官网进行适合自己环境的安装 node官网
2.2 安装Daruk框架和ts开发环境
在终端运行下面的代码
mkdir daruk-demo # 创建项目目录
cd daruk-demo # 进入项目目录
npm init # 使用 npm 初始化项目信息
npm install daruk ts-node typescript # 安装 Daruk 框架和 typescript
mkdir src # 创建源码目录
touch src/index.ts # 创建入口文件
touch tsconfig.json # 创建 typescript 的项目配置文件
2.3 编写web应用src/index.ts
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);
})();
2.4 编写tsconfig.json文件
{
"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"]
}
2.5 编辑package.json的启动和编译脚本
{
"scripts": {
"dev": "ts-node --project tsconfig.json --files src/index.ts",
"build": "tsc"
}
}
只要将dev和build那两行代码加入package.json中的script对象之中就好
2.6 启动Daruk服务(sh)
npm run dev
2.7 在线例子
可以查看这里完整的项目事例:Daruk-demo
3.总结
此次的博客简单介绍了下daruk和一些相关知识,以及daruk的安装教程,接下来会接着介绍一些项目启动以及装饰器方面的知识。
资料来源:Daruk官网
欢迎大家star,鼓励一下国产框架hhh
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。