技術開源項目從零到一的心路歷程

這是一次很是漫長過程,整個項目大約經歷了2年的開發與維護,期間重大的重構了十幾回架構。html

首先一句話介紹一下整個項目:基於 Node.js 的服務端 web 開發框架node

在這裏我分享一下個人經驗,但願可以幫助<<<想作開源的同窗>>>laravel

項目地址:傳送門git

背景

在公司中,咱們一致都是使用 koa 來做爲 node 的底層,對 koa + 各類中間件封裝成了一個簡易的框架,可是期間遇到了不少很差解決的問題,好比:ctx 的屬性如何維護,如何保證框架的擴展性(徹底經過中間件擴展框架既臃腫又不容易維護)等等, 因此我本身建立了這個項目,開始了此次開源項目之旅(受 springboot 與 laravel 的啓發)。。。es6

框架設計

基於 TypeScript 開發

爲了增長用戶開發的體驗(代碼提示)和框架的代碼質量(類型檢測),我決定引入 Typescript 做爲開發語言,其實初版開發的時候我仍是使用的 babel + es6 的方式開發的,可是通過屢次的嘗試,最後仍是決定使用 Typescript 重構代碼,最後結果也是很是完美(在這裏我也推薦你們嘗試 Typescript)github

AOP 編程

受 springboot 的啓發,在引入裝飾器(註解)以後,這種 AOP 的方式給我帶來了很是大的體驗提高,例如我不再須要在路由文件將路由指向控制器方法,而後找到控制器文件進行控制器代碼的編寫,我只須要 @http.get(path) 裝飾到控制器方法框架就能夠自動識別這個路由了web

依賴注入

不少語言的框架都採用了容器+依賴注入的方式,以容器做爲框架底層,其餘模塊以服務的形式在容器註冊,藉助容器的依賴管理功能來對全部模塊解耦,我以爲這種方式用起來很是的舒服(我的意見),因此決定將這種方式引入spring

路由

以前用 koa-router 的時候,讀過它的源碼,性能不怎麼好,後來看了 gin (Golang)框架的路由實現,以爲很是的適合(前綴樹路由結構),性能爆炸,並將其引入了項目中,效果很是理想,詳細能夠看基準測試數據傳送門編程

很是強大的擴展能力

框架不只經過容器對模塊進行了解耦,還能夠利用容器的依賴管理能力,加強擴展的功能。在個人設計中, 不只框架能夠註冊擴展,擴展也能夠註冊擴展,擴展之間還能夠互相依賴,「擴展擴展的擴展」!!!api

還有很是多的小設計。。。

生態建設

除了框架自己外,生態建設也很是重要,目前例如 Apache Dubbo 的 node 實現, Websocket 網關等擴展生態,也已經發布,將來會有更多官方的生態建設

心態的轉變

從一開始爲了提高本身而建立的項目,在通過幾回重構迭代以後,心態發生了轉變,但願本身的開源項目能幫助有需求的人,但願本身能爲社區做出貢獻,這種心態反而可以更快速的幫助本身提高

開源的好處

  • 幫助有需求的人,同時也幫助本身
  • 結交志同道合的朋友
  • 獲取社區反饋,提高項目質量

Github 工做流程

使用 Github Flow,全部的代碼更改都是經過 Pull Request 進行的

  • Fork 倉庫並從 master 建立本身的分支
  • 若是]添加了應該測試的代碼,添加測試。
  • 若是更改了 api,更新文檔
  • 確保測試所有經過
  • 確保代碼能夠經過風格檢測
  • 提交 Pull Request!

Commit 提交規範

我選擇使用 angular Commits 風格提交 commit, 這樣 history 看起來更加清晰,還能夠自動生成 changelog

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
複製代碼

type

提交 commit 的類型,包括如下幾種:

  • feat: 新功能
  • fix: 修復問題
  • docs: 修改文檔
  • style: 修改代碼格式,不影響代碼邏輯
  • refactor: 重構代碼,理論上不影響現有功能
  • perf: 提高性能
  • test: 增長修改測試用例
  • chore: 修改工具相關(包括但不限於文檔、代碼生成等)
  • deps: 升級依賴

scope

修改文件的範圍(包括但不限於 doc, model, controller, db, provider......) 等內置模塊

subject

一句話清楚的描述此次提交作了什麼

body

補充 subject,適當增長緣由、目的等相關因素,可選

footer

當有非兼容修改(Breaking Change)時必須在這裏描述清楚 關聯相關 issue,如 Closes #1, Closes #2, #3

總結

以上幾點都是我的的選擇,可是我仍是比較推薦的,有了統一個風格和規範,才能讓項目質量愈來愈好,也方便其餘小夥伴加入

其實開源並不難,只要你認真去作了(奉獻精神仍是比較重要的),而且認真的處理反饋意見,我相信你的開源項目必定能夠走的很遠,你們一塊兒爲開源社區貢獻一份力量吧,不管最後結果是怎麼樣的,對我本身來講,這是一段對本身提高最大的經歷!

若是你是 Node.js 開發者/對 Node.js 感興趣,歡迎加入個人開源項目哦~傳送門

相關文章
相關標籤/搜索