這是一次很是漫長過程,整個項目大約經歷了2年的開發與維護,期間重大的重構了十幾回架構。html
首先一句話介紹一下整個項目:基於 Node.js 的服務端 web 開發框架node
在這裏我分享一下個人經驗,但願可以幫助<<<想作開源的同窗>>>laravel
項目地址:傳送門git
在公司中,咱們一致都是使用 koa 來做爲 node 的底層,對 koa + 各類中間件封裝成了一個簡易的框架,可是期間遇到了不少很差解決的問題,好比:ctx 的屬性如何維護,如何保證框架的擴展性(徹底經過中間件擴展框架既臃腫又不容易維護)等等, 因此我本身建立了這個項目,開始了此次開源項目之旅(受 springboot 與 laravel 的啓發)。。。es6
爲了增長用戶開發的體驗(代碼提示)和框架的代碼質量(類型檢測),我決定引入 Typescript 做爲開發語言,其實初版開發的時候我仍是使用的 babel + es6 的方式開發的,可是通過屢次的嘗試,最後仍是決定使用 Typescript 重構代碼,最後結果也是很是完美(在這裏我也推薦你們嘗試 Typescript)github
受 springboot 的啓發,在引入裝飾器(註解)以後,這種 AOP 的方式給我帶來了很是大的體驗提高,例如我不再須要在路由文件將路由指向控制器方法,而後找到控制器文件進行控制器代碼的編寫,我只須要 @http.get(path)
裝飾到控制器方法框架就能夠自動識別這個路由了web
不少語言的框架都採用了容器+依賴注入的方式,以容器做爲框架底層,其餘模塊以服務的形式在容器註冊,藉助容器的依賴管理功能來對全部模塊解耦,我以爲這種方式用起來很是的舒服(我的意見),因此決定將這種方式引入spring
以前用 koa-router 的時候,讀過它的源碼,性能不怎麼好,後來看了 gin (Golang)框架的路由實現,以爲很是的適合(前綴樹路由結構),性能爆炸,並將其引入了項目中,效果很是理想,詳細能夠看基準測試數據傳送門編程
框架不只經過容器對模塊進行了解耦,還能夠利用容器的依賴管理能力,加強擴展的功能。在個人設計中, 不只框架能夠註冊擴展,擴展也能夠註冊擴展,擴展之間還能夠互相依賴,「擴展擴展的擴展」!!!api
除了框架自己外,生態建設也很是重要,目前例如 Apache Dubbo 的 node 實現, Websocket 網關等擴展生態,也已經發布,將來會有更多官方的生態建設
從一開始爲了提高本身而建立的項目,在通過幾回重構迭代以後,心態發生了轉變,但願本身的開源項目能幫助有需求的人,但願本身能爲社區做出貢獻,這種心態反而可以更快速的幫助本身提高
使用 Github Flow,全部的代碼更改都是經過 Pull Request 進行的
我選擇使用 angular Commits 風格提交 commit, 這樣 history 看起來更加清晰,還能夠自動生成 changelog
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
複製代碼
提交 commit 的類型,包括如下幾種:
修改文件的範圍(包括但不限於 doc, model, controller, db, provider......) 等內置模塊
一句話清楚的描述此次提交作了什麼
補充 subject,適當增長緣由、目的等相關因素,可選
當有非兼容修改(Breaking Change)時必須在這裏描述清楚 關聯相關 issue,如 Closes #1, Closes #2, #3
以上幾點都是我的的選擇,可是我仍是比較推薦的,有了統一個風格和規範,才能讓項目質量愈來愈好,也方便其餘小夥伴加入
其實開源並不難,只要你認真去作了(奉獻精神仍是比較重要的),而且認真的處理反饋意見,我相信你的開源項目必定能夠走的很遠,你們一塊兒爲開源社區貢獻一份力量吧,不管最後結果是怎麼樣的,對我本身來講,這是一段對本身提高最大的經歷!
若是你是 Node.js 開發者/對 Node.js 感興趣,歡迎加入個人開源項目哦~傳送門