Github Repo: https://github.com/qddegtya/let-us-koahtml
Just another koa-seed-project.git
搭建一個koa的腳手架並不困難,但就如其餘"體力活"同樣,github
咱們並不想重複勞動web
其餘腳手架生成出來的項目目錄結構可能並非咱們想要的npm
一些基於Express和Koa類型的框架型項目集成了ORM等重量級組件,固然,這自己無可厚非,你們的定位不同json
我但願只經過一個最小化的"容器"去啓動一個應用,它大概只須要如下幾個功能就能夠了,重要的是,它的目錄結構應該是清晰的,可維護的:api
核心思想:模塊即同名文件app
自動根據模塊級目錄生成路由框架
模塊可插拔koa
支持路由級中間件自動加載
腳手架只須要支持router,render,debug就能夠了
因此,let-us-koa的原理很是簡單,若是你想快速跑起來一個koa應用,你能夠這麼作:
$ git clone https://github.com/qddegtya/let-us-koa $ cd let-us-koa $ npm install
$ npm run start
在modules下面新建目錄便可,目錄名稱就是模塊加載器自動prefix的一級路由名稱,好比咱們這裏的api和home
分別對應
/api /home
模塊必須包含的文件
app.conf.json // 模塊配置文件 controllers.js // 控制器
{ "routes": [ // 路由規則 // [HTTP方法]#[/your route]#[controller] "GET#/version#getApiVersion" ], "active": true // 模塊是否激活 }
'use strict' // 只須要導出對應的方法便可 module.exports = { getApiVersion: function* () { this.body = { 'version': 'v1' } } }
{ // 子模塊目錄 "modules": "modules", // 上傳目錄 "upLoadDir": "public/uploads", // 自定義中間件存放目錄 "middlewareDir": "middlewares", // 子模塊渲染服務的view path "subModuleViewPathName": "views", // 全局渲染選項 "renderSettings": { "autoescape": true, "cache": "memory", "ext": "html" } }
應用級中間件
推薦把加載邏輯寫進middleware.js裏
路由級中間件
let-us-koa自動爲你處理了這塊中間件的加載邏輯
你能夠參考下面的配置:
{ "routes": [ "time|log|GET#/version#getApiVersion" ], "active": true }
它表示,該路由將通過time,log中間件,對應的源文件就是middlewares下的同名文件,固然,你能夠在全局的app.conf.g.json中更改這個配置
若是你的某個子模塊須要掛載渲染方法,那你必須顯式地在子模塊app.conf.json中聲明needRender選項
{ "routes": [ "GET#/#getHomePage" ], "active": true, "needRender": true }
這樣,let-us-koa就會自動爲你掛載這個render方法。
idea: 好比一些API服務模塊,可能不須要渲染服務,那就沒有必要構建render
默認託管在種子項目根目錄下的public
一個"儘可能最小化"的基於koa的web server容器,其實就能夠跑起來一些小應用,這些應用也許不須要持久化存儲等複雜功能的支持,好比它只須要一個簡單的渲染服務?
瞧,咱們能夠利用它快速搭建一個內部的研發平臺導航站點,It's Cool.
同時,但願給正在學習koa的你提供一個這樣的腳手架,讓你能夠快速起手。
So, Let us Koa!