《開源精選》是我們分享Github、Gitee等開源社群中優質項目的欄目,包括技術、學習、實用與各種有趣的内容。本期推薦的是一個基于漸進式理念研發的 Node.js 架構——Midway。
Midway 是阿裡巴巴 - 淘寶前端架構團隊,基于漸進式理念研發的 Node.js 架構,通過自研的依賴注入容器,搭配各種上層子產品,組合出适用于不同場景的解決方案。
Midway 基于 TypeScript 開發,結合了面向對象(OOP + Class + IoC)與函數式(FP + Function + Hooks)兩種程式設計範式,并在此之上支援了 Web / 全棧 / 微服務 / RPC / Socket / Serverless 等多種場景,緻力于為使用者提供簡單、易用、可靠的 Node.js 服務端研發體驗。
特性
- 全功能:支援 Web 應用/Serverless/FaaS/微服務/小程式後端等多種場景,基于裝飾器和依賴注入開發企業級應用
- 前端內建:全新的雲端一體應用研發體驗,零 API 調用,使用 "React Hooks " 風格一體研發
- 跨平台:支援部署至普通 Server 或 Serverless/FaaS 環境
- 擴充:元件化擴充能力,另外支援使用 Koa/Express/Egg.js 生态插件
- 示例:官方提供多種場景的示例代碼,友善開發者快速上手
- 語言:TypeScript 全面支援
為什麼要有 Midway
社群上也有很多類似的架構,那為什麼還需要 Midway ?
原因有三點:
- Midway 是阿裡内部一直持續在研發的架構,之前 egg 是作為底層架構,需要有面向應用層面的架構來和集團場景對接
- 全量使用 TypeScript 是未來一段時間的趨勢,面向未來去疊代和研發是作為架構組創新的要求
- 雖然社群已經有 nest 這樣的架構,但是這些産品的維護、協作、修改都會受到商業化産品的制約,也無法做到需求的快速疊代和安全性保障,整體的研發理念也和我們不同,為此,我們需要有一套自研的架構體系
多程式設計範式
Midway 支援面向對象與函數式兩種程式設計範式,你可以根據實際研發的需要,選擇不同的程式設計範式來開發應用。
- 面向對象(OOP + Class + IoC)
Midway 支援面向對象的程式設計範式,為應用提供更優雅的架構。
下面是基于面向對象,開發路由的示例:
// src/controller/home.ts
import { Controller, Get } from '@midwayjs/decorator';
import { Context } from '@midwayjs/koa';
@Controller('/')
export class HomeController {
@Inject()
ctx: Context
@Get('/')
async home() {
return {
message: 'Hello Midwayjs!',
query: this.ctx.ip
}
}
}
- 函數式(FP + Function + Hooks)
Midway 也支援函數式的程式設計範式,為應用提供更高的研發效率。
下面是基于函數式,開發路由接口的示例:
// src/api/index.ts
import { useContext } from '@midwayjs/hooks'
import { Context } from '@midwayjs/koa';
export default async function home () {
const ctx = useContext<Context>()
return {
message: 'Hello Midwayjs!',
query: ctx.ip
}
}
應用案例
- Cool-Admin - 一個很酷的背景權限管理架構
- VSC Plugin
—END—
開源協定:MIT
開源位址:https://github.com/midwayjs/midway