2017 Node.js 開發框架比較

但願這篇文章爲你們對 Node.js 後端框架選型帶來一些幫助。前端

JavaScript 這門語言的設計雖然被不少人詬病,可是由於其佔據了瀏覽器並且容易上手因此普遍流行。後來隨着 Node.js 的出現,npm 包管理帶來的強大生態更是如虎添翼(截止到 2017 年 3 月 npm 共有 43 萬個包)。可是這也形成了 JS 社區變態的快速迭代,你們都直呼趕不上,框架太多,選擇太多,眼花繚亂。node

下圖是 2016 年 Node.js 開發框架的發展勢頭排名(基於 Github 上 2016 年增長的 star 數)。git

Node.js 2016 Trend

關於上圖的更多細節可查看 2016 JavaScript Rising Starsgithub

Tip: 能夠經過網站 npms.io 快速瞭解一個 npm 包的質量。更多如何肯定一個包的質量,能夠參考《如何挑選高質量的 Node.js 模塊?》web

下面結合上圖簡單介紹一下各個框架。數據庫

  • 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,感受會對先後端交互帶來很大的革新)。npm

Meteor 是一個有點 ‘異類’ 的全棧框架。首先它先後端通訊使用 WebSocket 而不是 HTTP,因此實時性很好,但它不是一個 REST 框架,雖然能夠經過簡單的改造,提供 RESTful API;第二 Meteor 綁定了 MongoDB,讓喜好關係型數據庫的同窗愛不起來。不過如今 Meteor 也可使用 Apollo 和關係型數據庫交互了,比 REST 架構還方便。可是 Apollo 目前還處於開發階段。後端

  • Express 和 Koa
    這兩個是 Node.js 最基礎的後端框架。由於太基礎,因此構建一個 app 仍須要寫不少腳手架代碼,因而在它們基礎之上出現了不少其餘框架來減小編寫這類代碼。Express 應該是裝機量最多的,而 Koa 更新一些, 使用的技術更新穎,例如 promises 和 async function,再也不有回調函數嵌套的問題了。api

  • Feathers.JS
    Feathers.JS 構建與 Express4.0 基礎之上,Express 的那些中間件都能在 Feathers 裏直接使用。Feathers 另外特色是兼容 WebSocket 的實時性和 HTTP 的 REST。不過注意用戶鑑權默認使用 JWT,而不是傳統的 session。我以爲 JWT 更適合大一點的項目,例若有移動端須要調用 API。promise

  • Nodal

    和 PostgreSQL 綁定。對這個框架不熟悉,感受是爲 stdlib.com 這個雲服務商定製的,比較封閉的一個框架。
  • KeystoneJS
    KeystoneJS 是一個 CMS 框架,有點像 PHP 的Drupal,功能全面,適合作後臺管理,內容管理。自帶的用戶管理功能很方便。

  • LoopBack
    LoopBack 是由 StrongLoop 公司基於 Express 開發的開源框架。前年被 IBM 收購了。這是一個大而全的企業級框架,適合有多種終端,還有與其餘後端服務集成的場景。這篇文章解釋了 LoopBack 爲何火不起來? 。主要觀點是由於目前大系統都仍是 Java 框架的天下,Node.js 更可能是應用在前端和中間層。

不少人把它和 hapi 比較,由於都是用來開發 RESTful API。我我的認爲 LoopBack 火不起來的緣由是它限制有點多,不像 hapi 那麼靈活,hapi 更適合當下快速迭代的開發方式。

  • 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。根據多年來的經驗,一個項目要不是很快夭折,要不就是活到被重寫的那一天。用哪個真的不是過重要,趕忙先選一個幹起來。

相關文章
相關標籤/搜索