如何做好 NodeJS 框架選型?
- 2021 年 10 月 15 日
- 筆記
作為一個有一定工作經驗的工程師,工作中經常會遇到技術選型的問題。比如當我們在工作中需要使用到 NodeJS 時,第一個要解決的問題就是如何選擇一個合適的框架。
不同的框架有不同的特點,如果我們僅僅從框架提供的能力出發,往往會迷失在對不同框架能力的對比中。如果能有一個清單,照著這個清單來考察每個框架,最終選出最符合要求的框架,那就真是太棒了!
我們今天就試圖來討論出一個檢查清單,通過這個清單,我們可以找出最適合我們的框架。
我們的使用場景是什麼?
使用場景是最重要的考慮因素。在選擇框架之前,先搞清楚我們的訴求是什麼。
下面是一些常見的需要考慮的點:
- 我們的應用是全棧應用還是只提供 API 服務? 如果只提供 API 服務的話,是 REST 介面還是 GraphQL 介面?
- 是否需要服務端渲染? 如果我們使用 React 或者 Vue 來開發頁面的話,一些 NodeJS 框架本身提供了對這些 UI 框架的支援。
- 是否需要實時響應? 如果我們需要使用到 WebSockets,是選擇一個支援 WebSockets 的框架,還是找一個社區維護的第三方庫來集成到框架中?
- 是否支援 TypeScript? 我們是否要用 TypeScript 來開發應用?有些框架是使用 TypeScript 開發的,有些框架只提供了類型聲明,而有些框架只有社區第三方維護的類型聲明。即使我們不使用 TypeScript 開發,類型聲明也可以通過編輯器提示給我們帶來巨大的幫助。
框架的風格
有些框架除了處理 HTTP 請求和響應以外,還提供了類似於校驗、日誌、認證、資料庫抽象以及依賴注入等其他豐富的功能。這些框架通常對開發者有一些額外的要求,比如要按照框架要求的形式來組織程式碼才能使用框架的一些能力。
有一些框架只提供處理 HTTP 請求和響應的基本能力。其他能力需要開發者自行實現或者從框架的生態中自行獲取。使用這些框架的開發者自由度很高,可以自由組織程式碼形式。但是當需要一些其他功能時,開發者需要額外付出精力來篩選合適的社區實現。
還有一些框架採取了中庸的形式,即除了提供 HTTP 請求和響應的基本能力以外,還提供了稍許功能,比如日誌和校驗等。
選擇哪種風格的框架,可以從上面列出的使用場景出發,也可以從個人和團隊的風格偏好出發。
文檔
豐富的文檔至關重要。沒有人會想一邊開發業務,一邊通過閱讀框架的程式碼來了解框架的能力。如果一個框架沒有文檔,我們應該拒絕使用。對於有文檔的框架,我們如何評價文檔的品質呢?
可以從下面幾點出發:
- 是否可以方便的查找? 比如文檔的結構是否容易理解?是否提供搜索功能?
- 文檔是否有意義? 文檔很重要,有用的文檔更重要。沒有用的文檔寫的再多也沒有意義。
- 當寫程式碼的時候,這些文檔是否能派上用場? 閱讀和理解如果做一件事是一回事,動手做一件事是另一回事。在我們寫程式碼的時候,文檔是否可以直接明確的幫助我們?
實用的樣例
說的再多不如寫一個樣例給我。閱讀文檔有時候會讓我們迷失方向,如同墜入一團霧中。如果有一些官方提供的實用樣例的話,對理解框架以及解決實際問題的幫助就很大。官方提供的樣例通常也會是解決某一個具體問題的最佳實踐。
通常,我們可以在框架源程式碼的 examples
目錄中找到樣例,有些框架還會有一個專門的倉庫來存放各種各樣的樣例。
社區生態
一個框架的社區生態非常重要。在選擇框架的時候,觀察下框架是否有討論組之類的東西。參與其中的人是否友好、是否樂於幫助他人等。
框架是否流行不能決定我們是否選擇這個框架。但是我們在選擇框架的時候,要了解是否有其他開發者也在使用。如果我們選擇了一個被廣泛使用的框架,那麼我們通常可以找到其他開發者開發的類庫(中間件或者插件等)。
一個倉庫的 star 數量某種意義上能夠代表框架的受歡迎程度。但是卻不能準確的表達框架的使用情況,我們可以從框架的下載量著手。雖然有一些框架被其他類庫內置使用,導致下載量很高,但是一定程度上可以說明框架在市面上的使用程度。我們可以在 npm trends 上看到框架的下載量變化。
項目的健康程度
當我們決定選擇一個框架的時候,我們還需要確保這個框架在可見的未來時間內依然能夠得到有效的維護。
我們可以從下面幾個方面來考察項目的健康程度:
- 版本發布頻率 即使一個框架的功能已經非常完善了,安全更新和問題修復依然十分重要。因此在面對已經暫停維護或者很長時間沒有發版的項目的時候,需要慎重考慮。
- 官方在 issue 的活躍程度 如果一個項目的 issue 里官方成員的參與程度很低,可能在暗示這個項目已經不再維護了。相反,如果一個項目的 issue 很少,有可能說明社區對這個框架的使用程度很低。
- Pull request 一個健康的項目,通常都會有一些近期剛提交的 pull request。如果一個項目有很多很好的 pull request 沒有合併,可能說明這個項目已經不再維護了。
- 貢獻者 如果一個框架的貢獻者只有一兩個人,說明社區對這個框架的關注度不高。同時較少的貢獻者,會給框架的長期維護帶來不確定性。一個健康的框架,應該有很多貢獻者參與進來。
- 項目依賴 一個有著很多依賴的框架,可能受攻擊的地方也很多。同時,太多的依賴也可能給開發調試帶來很多問題。我們可以通過 npmgraph 這個工具才查看一個項目的依賴情況。
這裡有一些評價一個項目健康度的工具可以使用:
- Synk Open Source Advisor 這個工具會從多方收集一個包的數據,然後給出這個包的打分。
- GitHub 倉庫的 “Insights” Tab 頁 GitHub 上每個倉庫中的這個 Tab 提供了這個倉庫近期的活動情況,包括發版、pull request、issue 和貢獻者等。
- Moiva 這是一個開源工具,與上面兩個工具提供的能力相同。但是這個工具允許我們同時對比多個框架。
總結
在選擇一個 NodeJS 框架的時候,我們有很多方面需要考慮。但是最後也是最重要的一點是,我們在使用這個框架的時候,是否享受使用它的過程。如果不是,那麼即使框架解決了一些問題,我們也會非常難受。
選擇一個靠譜的 NodeJS 框架有時候非常棘手,希望這個檢查列表能給正在做框架選型的人一些幫助。
常見面試知識點、技術解決方案、教程,都可以掃碼關注公眾號「眾里千尋」獲取,或者來這裡 //everfind.github.io 。