我偶然間看到這篇文章,轉這個文章並沒有什么含義,僅僅是感覺總結的不錯,對於新學node的友友們來說希望這篇文章為大家對 Node.js 后端框架選型帶來一些幫助,學習不再迷茫,也是讓我有個保存,以后參照時候就不再尋找了。
轉自https://cnodejs.org/topic/58caaec27dee71e5193a53ce
JavaScript 這門語言的設計雖然被很多人詬病,但是因為其占據了瀏覽器而且容易上手所以廣泛流行。后來隨着 Node.js 的出現,npm 包管理帶來的強大生態更是如虎添翼(截止到 2017 年 3 月 npm 共有 43 萬個包)。但是這也造成了 JS 社區變態的快速迭代,大家都直呼趕不上,框架太多,選擇太多,眼花繚亂。
下圖是 2016 年 Node.js 開發框架的發展勢頭排名(基於 Github 上 2016 年增加的 star 數)。
關於上圖的更多細節可查看 2016 JavaScript Rising Stars。
Tip: 可以通過網站 npms.io 快速了解一個 npm 包的質量。更多如何確定一個包的質量,可以參考《如何挑選高質量的 Node.js 模塊?》
下面結合上圖簡單介紹一下各個框架。
-
Meteor 很奇怪前面提到的 2016 JavaScript Rising Stars 居然沒有把 Meteor 列入。Meteor 目前在 Github 上已經是 star 最多的 web app 開發框架了。注意不是僅限於 JS 范圍哦。它已經超越了 Ruby 的 Rails 和 PHP 的 Laravel。(參考 Github web app frameworks Rank)。當然星星多並不能說明全部問題。Meteor 最近動作不多,可能是他們團隊在忙着開發基於 GraphQL 的 Apollo 框架的原因。(建議大家關注一下 Apollo,感覺會對前后端交互帶來很大的革新)。 Meteor 是一個有點 ‘異類’ 的全棧框架。首先它前后端通信使用 WebSocket 而不是 HTTP,所以實時性很好,但它不是一個 REST 框架,雖然可以通過簡單的改造,提供 RESTful API;第二 Meteor 綁定了 MongoDB,讓喜愛關系型數據庫的同學愛不起來。不過現在 Meteor 也可以使用 Apollo 和關系型數據庫交互了,比 REST 架構還方便。但是 Apollo 目前還處於開發階段。
-
Express 和 Koa 這兩個是 Node.js 最基礎的后端框架。因為太基礎,所以構建一個 app 仍需要寫很多腳手架代碼,於是在它們基礎之上出現了很多其他框架來減少編寫這類代碼。Express 應該是裝機量最多的,而 Koa 更新一些, 使用的技術更新穎,例如 promises 和 async function,不再有回調函數嵌套的問題了。
-
Feathers.JS Feathers.JS 構建與 Express4.0 基礎之上,Express 的那些中間件都能在 Feathers 里直接使用。Feathers 另外特點是兼容 WebSocket 的實時性和 HTTP 的 REST。不過注意用戶鑒權默認使用 JWT,而不是傳統的 session。我覺得 JWT 更適合大一點的項目,例如有移動端需要調用 API。
-
Nodal 和 PostgreSQL 綁定。對這個框架不熟悉,感覺是為 stdlib.com 這個雲服務商定制的,比較封閉的一個框架。
-
KeystoneJS KeystoneJS 是一個 CMS 框架,有點像 PHP 的Drupal,功能全面,適合做后台管理,內容管理。自帶的用戶管理功能很方便。
-
LoopBack LoopBack 是由 StrongLoop 公司基於 Express 開發的開源框架。前年被 IBM 收購了。這是一個大而全的企業級框架,適合有多種終端,還有與其他后端服務集成的場景。這篇文章解釋了 LoopBack 為什么火不起來? 。主要觀點是因為目前大系統都還是 Java 框架的天下,Node.js 更多是應用在前端和中間層。
-
Sails 和 Trails 從名字看應該都是向 Ruby 的 Rails 學習的 MVC 框架,之前沒有用過 Rails,所以對他們沒有太多了解。估計適合從 Ruby on Rails 轉過來的同學。
-
hapi 和 restify 從名字可以看出是構建 RESTful 服務的框架,適合后端是微服務的架構。二者個人更傾向於 hapi(來自沃爾瑪團隊),這里有一篇中文的安利 hapi 的文章。個人推薦這個框架來開發面向服務的 API。
-
Egg 阿里巴巴開源 (據說不是一個 KPI 開源項目) 的 Egg.js,號稱為企業級框架和應用而生。它有點像 Feathers,但是基於 Koa;另外不像 Feathers,Egg 沒有自帶認證功能,使用 cookie/session 鑒權。更多細節可以看如何評價阿里開源的企業級 Node.js 框架 egg?。感覺是一個不錯的企業級 Node.js 框架。理念先進,功能也全。
-
Gatsby 和 Hexo 靜態網站生成。適合做文檔、博客類網站。比動態 web app 加載更快。Gatsby 基於 React,比 Hexo 新,維護得更好些。
比較
那么,這么多框架到底怎么選?
關鍵還是看你的應用場景。是需要一個單體的應用還是微服務化?需要怎樣的認證和授權?數據庫偏好?下面說說我的淺見。
-
剛開始試玩 Node.js,學習 Express、Koa 如果只是想試試並學習 Node.js 開發后端服務,建議從 Express 開始,因為它夠簡單,而且是很多其他框架的基礎,擴展也容易。如果你對 JavaScript 的 promise 和 async 熟悉,那也可以從 Koa 開始。
-
開發內容管理站點、簡單的后台管理用 Keystone,不介意使用 MongoDB 的用 Meteor 如果你要開發一個不太復雜的內容管理應用,比如一些經常更新內容、圖片的站點,用戶權限等后台管理等,那么 KeystoneJS 比較合適,因為它已經內置了很多這些功能。Meteor 當然也適合。
-
企業應用首選 Egg Feathers 和 Egg 都適合開發企業應用。有日志、安全、多進程通信的解決方案,非常便利。Feathers 中文文檔少,使用 Express 和 JWT,偏重實時交互;Egg 由阿里開發,使用 Koa,感覺更適合國內的企業應用開發。
-
實時 web app 使用 Meteor 如果你要開發一個涉及聊天、物聯網功能的實時應用,那么 Meteor 和 Feathers 很適合。
-
構建微服務 REST API 首選 hapi 如果你要開發簡單的幾個微服務后端,那么 hapi 和 restify 合適。如果是大型的復雜應用,甚至是在現有微服務上構建,那么 LoopBack 可能是個好選擇,它可以把很多服務 glue 到一起。還可以結合 StrongLoop 的 API 網關一起使用。
- 靜態網站生成首選 Gatsby,不使用 React 的話用 Hexo。
最后,建議大家選擇的時候不要太糾結,差不多就行了。因為在項目開始時不可能想得面面俱到,關鍵是大的方向,快點出 MVP。根據多年來的經驗,一個項目要不是很快夭折,要不就是活到被重寫的那一天。用哪一個真的不是太重要,趕緊先選一個干起來。