Daruk is a lightweight web framework base on Koa and written in Typescript. Koa is original http server implementation if you used it. In the daily development,we have to use many open source middleware in Koa to implement scaffold, routing, abstraction and some components such as logging, monitoring, etc.
We can create your web project by Daruk scaffold for business. Daruk core is lightweight and easy extension and learing, but it can provides more options for developer to rapid development such as constraints directory specification and code style.
Daruk, it comes from The Legend of Zelda: Breath of the Wild one of the four heroes, it have symbol of guardian ability. The goal of the framework is also as it.
Daruk is base on Koa2, includes features:
- Scaffolding
- Directory and file specification
- Auto loader and decorator combination
- Complete Typescript development experience
- Life cycle and hook.
- Custom(performance logs & business logs) & tracked
- Online performance analysis
- Lightweight link tracking
- The MVC development of object-oriented
- Supporting the development of the module
# install daruk scaffold cli
cnpm i -g daruk-cli
# init project
# --ignore ignore local template cache
daruk init --ignore daruk-example
# run the project
cd daruk-example
npm run dev
You can write your code shown below :
import { Daruk } from 'daruk';
const port = 3000;
const myApp = new Daruk('darukProject', {
rootPath: __dirname,
debug: process.env.NODE_ENV === 'dev'
});
myApp.listen(port);
controllers/index.ts
:
import { BaseController, config, Context, Daruk, get, middleware, util } from 'daruk';
export default class Index extends BaseController {
@util('getToday')
public getToday: Daruk['util']['getToday'];
@config('author')
public author: Daruk['config']['author'];
@config('version')
public version: Daruk['config']['version'];
@middleware('cors')
@get('/')
public async index(ctx: Context, next: Function) {
const weather = await ctx.service.weather.getWeather();
ctx.body = `Hi, ${this.author}, project version is ${
this.version
}, Today is ${this.getToday()}, weather is ${weather}`;
}
}
More information you can check out example/03-weather.
More docs: Quick Start
Beta TodoList
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
Thanks goes to these wonderful people (emoji key):
xiaojue π» π¨ | whale π» | cuzz π» | ζ©ζ£ζ§ηΎδΈηι’ε | arck.liu π» π | Manjusaka π» | KenyeeCheung π» |
ChasLui π | ζ¨ζ π» | icepy π» | jeffjing π» |
This project follows the all-contributors specification. Contributions of any kind welcome!