對於Node.js框架和開源軟件來說,2018年是非常有趣的一年。開發者社區討論了企業贊助對開源項目的作用以及如何維護那些沒有經濟支持卻有數百萬人使用的項目。同樣,安全問題也得到了極大關注,一些流行的Node/JS軟件包被劫持,Github爲託管的項目推出了安全警報功能。
在這篇文章中,我們爲Node.js框架增加了新的類別,如贊助情況、捐贈情況和NPM審計漏洞,以便更好地瞭解每個框架如何解決這些問題。框架按字母順序排列。
數據圖表
Github star數
在Github星標數量方面,Sails、Koa和Express明顯高於其他框架。但是,在2019年,星標總量可能不能作爲最具相關性的指標,我們還需要考慮增長情況。
2018年star數增長
在2018年星標數量增長方面,Nest呈現出非常明顯的爆發式增長。Y軸是從2018年1月初到2018年12月中旬的增長百分比。有趣的是,相比之下,Sails和Express幾乎是扁平的,但這也可能是由於市場出現了飽和:有興趣給Node.js框架加星標的人總共就那麼多。
依賴關係
從這個角度來看,Nest非常少,而Sails幾乎是Nest的四倍。
NPM每週下載量
Express讓所有競爭對手的下載量相形見絀。只有Koa和Hapi在這張圖上出現了微小的彩色條紋。當然,有些框架在內部使用了Express,比如Sails和Nest。
選擇Node.js框架
每個框架都有自己的目標、設計決策和特點。你應該仔細考慮這些東西是否適合你的用例。
有時候可以這麼想:
“我們需要一個完整的Web應用程序,包括HTML模板、數據庫模型、身份驗證、API集成、郵件列表,等等”。
在本文中,我們將這些標記爲全棧。一個完全不同的用例可以是:
“我們只需要一個後端API端點,用於攝取JSON格式的IOT數據”。
我們將這些標記爲API。當然,你的用例可能是介於兩者之間。在這種情況下,你需要一個框架,先從小規模開始,然後通過加入插件或中間件增加其他複雜性和功能。我們將這些標記爲Minimal,因爲這些框架的核心都很小,不過生態系統爲它們提供了其他模塊。
AdonisJs
AdonisJS生態系統附帶了一組特定模塊,可以插入到核心框架中。這意味着,測試運行器或模板引擎對於大多數用戶來說可能是新的,不過你也可以使用其他運行器或模板引擎。
AdonisJs於2016年啓動,目標是成爲一個全棧式框架:可以直接使用HTTP請求路由、模板、身份驗證和數據庫ORM。
在社區中,人們通常將AdonisJs與PHP的Laravel進行比較。
Exepress
Node.JS API框架的祖先。它仍然是一個非常小的框架,爲你提供了一個簡單的API服務器,用戶通過衆多可用的中間件項目來添加額外功能。
因爲佔用資源少,Sails.js和Nest等框架使用Express作爲基礎應用程序層,然後使用額外的功能對其進行擴展。
Fastify
Fastify是一個100%針對性能進行優化的API框架。受到Hapi和Express的啓發,維護人員選擇專注於在開發者體驗和原始速度及性能之間實現平衡。
Fastify仍然是一個非常小的框架,但中間件架構與Express和Restify中間件兼容,極大地擴展了可能的用例。
Fastify提供了實驗性的HTTP 2.0支持,並支持TypeScript類型。
Hapi
Hapi由沃爾瑪開發,旨在爲他們的電子商務業務提供堅實的基礎。現在作爲開源框架分拆出來,與沃爾瑪已經沒有關係。Hapi現在仍然很受歡迎。
Hapi提供了大量獨立但緊密集成的插件,提供了日誌記錄、模板、緩存、錯誤處理等功能。它的對象驗證插件Joi(https://github.com/hapijs/joi)和框架本身一樣很受歡迎。
在社區中,Hapi因其API、健壯性和可靠性而備受讚譽。此外,Hapi沒有任何外部代碼依賴,因此其安全性更加可控。
Hapi 17.x使用ES6和ES7進行了全面重寫。
Koa
Koa的開發者與Express是同一波人,但它是以利用新的Javascript語言功能爲目標,如async/await。Koa框架甚至比Express更小,基本安裝中不包含路由。
Koa是最早利用ES6和ES7功能的API框架之一。
Koa提供了一份第三方中間件列表,幾乎和Express的一樣長,儘管有很多中間件似乎已經被遺棄或者沒有人進行定期維護。
Nest
Nest於2017年嶄露頭角,並在2018年大受歡迎(至少從Github的星標數來看)。Nest與其他框架略有不同,因爲它是基於TypeScript的,並使用了Express。Nest也可以使用“普通”JavaScript,但框架作者還是極力建議使用TypeScript。
Nest提供了一個內置的GraphQL適配器,利用了流行的Apollo框架,儘管現在已經有很多傳統的ORM和數據庫可用的解決方案,例如Mongoose(Mongo)或TypeORM(MySQL/Postgres)。
對於Nest來說,2018年是美好的一年,我們很期待2019年它將爲我們帶來哪些東西。
RESTify
Restify的目標是成爲一個構建RESTful API的框架,而其他框架傾向於解決API、靜態內容和模板解析問題。它已經被用在NPM、Netflix、Joyent和Pinterest的生產環境中。
Restify的目標在它的文檔和指南中可見一斑。它們很簡單,而且直接了當。可以使用插件API來構建擴展,不過第三方插件並不多。
可調試性是Restify的一個主要特點,它支持自動生成Dtrace探針,這是其他框架中不常見的功能。
Sails
Sails可以說是第一個提供類似於Ruby on Rails“全棧式”體驗的Node.js Web框架。它提供了一個MVC框架和匹配的技術棧滿足大多數業務場景的需求。
你可以非常快速地搭建一個CRUD應用程序,因爲代碼即配置原則以及框架爲開發人員選擇的默認設置。與Rails類似,Sails也提供了腳手架生成器,可以基於對象/實體創建API端點。Sails還提供了自己的Waterline ORM,支持多種數據庫類型,如Postgres、MongoDB和Redis。
該框架最初由Balderdashy公司開發,現在這家公司已更名“Sails公司”,爲Sails提供企業支持。
Server.js
Server.js始於2017年,在2018年一直保持穩健的增長。作爲一個新框架,Server.js使用了現代ES2016和ES2017語言功能。它提供的組件包括:文件服務、Websocket、CSRF、SSL,等等。默認情況下,甚至可以將會話保存在Redis中。
因爲Server.js也基於Express的,因此你也可以使用Express中間件來擴展其功能。
除了有一個很棒的NPM軟件包名之外,Server.js看起來也非常有前途,雖然它很輕量,但卻是一個全棧式API和Web框架。
英文原文:
https://checklyhq.com/blog/2018/12/node.js-api-and-web-frameworks-for-2019/
更多內容,請關注前端之巔。