daruka node.js web framework based on typescript
Daruk
Daruk 是一款基于 Koa2,使用 Typescript 開發(fā)的輕量級 web 框架。Daruk 的初衷是讓人們可以更方便的開發(fā) Nodejs Web 應(yīng)用并能夠體會到 Typescript 編程的樂趣。Daruk 本身基于 100%基于 Typescript 開發(fā),使用 inversifyjs 的 IoC 容器管理依賴,讓開發(fā)者享受最佳的 OOP 和 IoC 的編程體驗(yàn)。
框架內(nèi)部集成了許多方便靈活的裝飾器函數(shù),讓開發(fā)者可以寫更少的代碼來完成更多的事情,Daruk2.0 更改了之前嚴(yán)格要求目錄約定的范式,提供給開發(fā)者更靈活的操作空間來進(jìn)行項(xiàng)目約束和編寫,但是內(nèi)置的功能并沒有缺失,整個框架的開發(fā)能力和 Daruk1.0 能力持平。
比如在 Daruk2.0 中,我們可以使用裝飾器來快速定義 service,controller,timer,middleware 等能力來編寫 web 應(yīng)用,且提供了一些基本的內(nèi)置中間件和路由服務(wù)等,更靈活的定義,讓 Daruk2.0 可以更靈活的定制你的 web 項(xiàng)目和編寫測試腳本。
Daruk 來源自塞爾達(dá)傳說曠野之息里的四英杰之一,擁有在周圍張開結(jié)界保護(hù)自己的力量,框架的目的也是為了給 nodejs server 提供健壯的基礎(chǔ)管理能力。
Daruk2.0 同樣基于 koa2,目前包含以下核心功能:
- 開啟裝飾器配置,ts 環(huán)境下引入即用,無需腳手架等工具。
- 提供給開發(fā)者編寫影響框架內(nèi)部能力的插件機(jī)制
- 可以自定義目錄結(jié)構(gòu),在啟動時使用 API 加載你自己定義的源文件
- 完整的 typescript 開發(fā)體驗(yàn)
- 服務(wù)啟動完整生命周期 hook
- 自定義(性能日志 & 業(yè)務(wù)日志) 染色功能
- 支持線上實(shí)時性能分析
- 輕量級的鏈路追蹤
- 面向?qū)ο蟮?mvc 開發(fā)體驗(yàn)
- 配套的一些周邊模塊
Installation & Quick start
安裝
mkdir daruk-demo
cd daruk-demo
npm init
npm add daruk ts-node typescript
mkdir src
touch src/index.ts
開始編寫 web 應(yīng)用 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);
})();
創(chuàng)建編譯時的 tsconfig.json 文件
touch 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"]
}
編輯 package.json 的啟動和編譯腳本
{
"scripts": {
"dev": "NODE_ENV=dev ts-node --project tsconfig.json --files src/index.ts",
"build": "tsc"
}
}
啟動服務(wù)
npm run dev
> NODE_ENV=dev ts-node --project tsconfig.json --files src/index.ts
[2020-9-1 19:52:12] [debug] [init] [router] get - /
打包腳本并啟動編譯后的腳本
npm run build
node build/index.js
Docs
查看 Daruk 文檔快速開始吧! TypeDoc 則可以從這里開始 API DOC吧!
Example
查看實(shí)際的 web 服務(wù)例子 example
使用騰訊云應(yīng)用一鍵部署:
How to Contribute
Please let us know how can we help. Do check out issues for bug reports or suggestions first.
To become a contributor, please follow our contributing guide
Some companies using Daruk
Contributors
Thanks goes to these wonderful people (emoji key):
| xiaojue |
whale |
imakan |
cuzz |
擴(kuò)散性百萬甜面包 |
arck.liu |
Manjusaka |
| KenyeeCheung |
ChasLui |
木杉 |
icepy |
jeffjing |
yiliang |
imakan |
| WangHan |
zuigzm |
南北 |
凌 |
This project follows the all-contributors specification. Contributions of any kind welcome!
