如何選擇Node.js Web開發框架?
Node.js非常適用於Web開發,但是現在無論是一個網站,還是Web App都已經成為包括很多不同部分,如前端、資料庫、業務模組、功能模組等等的大型專案,使用Node.js從零開始進行Web開發,也許大中型團隊能夠勝任,但對於個人和小型團隊來說是不現實的。這時候框架就成為Web開發利器,對於個人開發來說幾乎是必不可少。那麼如何選擇Node.js Web開發框架呢?
首先,我們必須要弄清楚的是,我們需要的是——
程式 or 框架?
程式是已經成型的應用,你需要的是為它搭建環境、新增配置,然後就可以執行起來;框架則是應用的骨架,你需要為它新增資料模型、業務邏輯,它才能成為應用,開始提供服務。
事實上,對於Web開發來說,程式和框架的區別正越來越模糊,比如幾乎婦孺皆知的Wordpress,它是一個部落格程式,但它豐富的外掛以及高度的自定義能夠支援很大程度上的二次開發,在這點上它比起一些PHP框架也並不遜色。我個人認為,如果重心在於提供服務而不是掌握技術,有WordPress這樣的程式是沒有必要使用框架的。
可惜的是,由於Nodejs還很年輕,目前還沒有WordPress這樣的程式,因此目前在Node.js開發裡,如果想做出自己想要的作品,框架是必然的選擇。如果是某些特定型別的應用,可以嘗試一些開源的程式,比如要用Nodejs做部落格,有Hexo、Ghost等。
Node.js Web框架有哪些?
Node.js裡的Web框架分為API框架和Web應用框架。前者能夠開發出RESTful的API,後者也能開發出RESTful API,但還包括模板、渲染等為前端所準備的功能。
API框架的使用場景是為跨平臺應用提供統一的資料模型,而渲染由前端/客戶端自行解決。目前比較知名的API框架有
- restify(文件、Github、NPM)
- ActionHero.js(官網、Github、NPM)
- LoopBack(官網、Github、NPM)
- Fortune.js(官網、Github、NPM)
Frisby(官網、Github、NPM)經提醒修正,這是一個用於測試RESTful API的框架,並不是API框架。
Web應用框架顧名思義,就是為了打造Web應用所開發的框架。這裡有兩種風格的Web應用框架。
一個是Sinatra風格,另一個是Rails風格。Sinatra和Rails都是Ruby語言的Web框架,後者的影響力更大也更為知名。這裡簡單的解釋一下兩種風格是什麼意思。
Sinatra風格是指高度可配置,注重開發的自由度。代表性的Nodejs Web框架有:
- Express(官網、Github、NPM)TJ大神開發,Node.js官方推薦
- hapi(官網、Github、NPM)
- koa.js(官網、Github、NPM)
- flaliron(官網、Github、NPM)
- total.js(官網、Github、NPM)
- locomotive(官網、Github、NPM)
Rails風格則是指不重複自己和約定優於配置,以及嚴格遵循MVC結構開發。代表性的框架有:
這兩種風格無所謂誰優誰劣,全憑使用者的偏好。
而在這兩種Web框架之外,還有更大型的框架,即全棧框架,其中的代表是MEAN。
MEAN?
MEAN指MongoDB+Express+Angular.js+Node.js,這一組合包括執行環境、資料庫、Web框架和前端引擎。被稱為全棧框架(Full-stack framework)。這其中除了Node.js之外,每一個都是可替換的,目標是建立從前端到後端,全部使用javascript的Web應用。
由於這一框架的完善性,有人將其稱為LAMP的接班人。LAMP即PHP的典型執行環境,Linux+Apache+MySql+PHP,被大量的用於各種虛擬主機上。
MEAN看似龐大,但事實上要構建完整的現代化Web應用,特別是SPA(單頁面應用),這幾個元件都是難以缺少的,並且,其中每一項幾乎都是目前情況下的最佳選擇,因此用於學習和重頭開始打造新的Web應用是非常合適的。但由於實際業務的獨特性,很可能要替換其中的元件,比如用Mysql來替換MongoDB,因此,學習其中的原理和架構,打造自己的類MEAN框架也是一種選擇。
作為個人和小團隊來說,全棧框架MEAN基本上足夠了,但目前大多數全棧框架還包含一項特性,那就是實時,擁有實時功能的框架我們又稱為實時框架。
實時框架好嗎?
實時框架(Real-time framework)指包含了webSocket的雙向通訊功能,能夠在伺服器和客戶端做到實時通訊的框架。
服務端和客戶端自由通訊的需求一直都在,但由於HTTP協議本身的侷限性,因此催生了comet等變通的方法,但即使這樣也離實時相距甚遠。而當Node.js興起後,另一個HTML5技術webSocket也漸漸成熟,人們突然發現,實時通訊一下子變得觸手可及,於是webSocket技術在Node.js中得到大量的應用,其中最為知名的模組就是socket.io,而各種全棧框架也紛紛加入實時特性來應對更廣闊的開發需求。
目前有代表性的實時框架有:
不過說實話,目前能看到的實時通訊的應用場景其實不多,其中大多集中於聊天室、to-do、實時圖表、線上遊戲等領域。其他領域使用實時特性不但沒必要,而且是對伺服器資源的浪費。因此目前是否要採用實時框架,要看具體的專案而定。
以上基本就是Node.js Web框架的現狀了,相信看到這裡,對於選擇何種框架讀者已經心裡有數了吧。最後再介紹一個容易搞混的概念,和解釋一下我的選擇。
YEOMAN?
第一次見到這個詞,我還以為它和MEAN有什麼聯絡。事實上,它們是截然不同的兩個東西。YEOMAN由YO(腳手架)、grunt(構建工具)、bower(包管理器),它代表的是一種工作流,與框架開發的思維方式完全不同。具體的介紹可見這裡。
YEOMAN能夠和框架達到類似的目的,都是為構建一個Web應用做好準備,但是要不要採用YEOMAN,則是見仁見智。我個人的看法是,學習YEOMAN本身就需要不少時間,並且有一定的學習門檻。至少在目前,使用框架開發還是相對經濟的,而如果以後YEOMAN這種模式推廣開來,再來學習也不遲,更何況有一定的Node.js專案經驗之後再來學習YEOMAN要輕鬆很多。
事實上,我還是很認可YEOMAN這種Generator+package Manager的模式的,這是因為Node.js本身崇尚微模組的概念,即無論是多麼小的功能,都將它們模組化,甚至大的模組也要拆分成小的模組,然後通過搭積木的方式來構建應用。這樣能夠徹底的解耦,對於不容易除錯的Javascript來說,也有助於定位和修復應用中的問題。Generator就是這種理念催生下的產物,通過選擇不同的配置和選項,將積木搭起來。不過對於這種模式目前大家也還處於實驗當中,不急於進行實際應用。
為什麼我選擇了Hackathon Starter?
在我的個人專案中,使用的是Hackathon Starter,一個Node.js Web應用腳手架。
我使用它的原因是,要求高度可配置,同時又討厭寫一些配置的程式碼,因此它對於我來說是很好的選擇。一些全棧框架對我來說,封裝過多,將原生的Node.js/Express API隱藏掉了,要使用還需要一定的學習成本。而Express這樣的框架又太過簡潔,在實際的專案中使用還需要大量的外掛和配置,而這些在Hackathon Starter中都已經幫我們做好了,同時還有一些示例程式碼以供學習,對於新人來說非常友好,可以避免過多的挫折感。
上面一段可以看做是免費為Hackathon Starter做的廣告吧,開源專案需要宣傳和佈道才能讓更多人所關注。
最後,本文裡的框架大多來源於nodeframework網站,本文可以看做是該站的註釋版,在掃清我自己的一些疑惑的同時,也希望對讀者有所幫助。
相關文章
- web開發|如何選擇合適的webui框架WebUI框架
- 創業如何選擇WEB開發語言創業Web
- 如何選擇優秀的Web開發工具/IDE?WebIDE
- Node.js 成為 Web 應用開發最佳選擇的十個原因Node.jsWeb
- 為何Node.js 能成為 Web 應用開發最佳選擇?【強推理由】Node.jsWeb
- WEB開發中合理選擇圖片格式Web
- 選擇WEB前端開發,如何才能不成為一個碼農Web前端
- 如何選擇微信小程式開發框架?2018年更新微信小程式框架
- 如何選擇開發語言或者開發工具
- 如何選擇 Web 前端模板引擎?Web前端
- 如何選擇Web前端模板引擎?Web前端
- 如何進行機器學習框架選擇機器學習框架
- 如何進行框架的選擇框架
- 如何選擇一個Flex框架Flex框架
- web開發語言的選擇:PHP or JAVA薦WebPHPJava
- 如何為你的專案挑選適宜的Web開發框架?Web框架
- 淺析Ruby的備選Web開發框架CubaWeb框架
- 我們是如何選擇框架的?框架
- 如何選擇前端框架:ANGULARVSEMBERVSREACT前端框架AngularReact
- 分享一個基於 Node.js 的 Web 開發框架 – NokitjsNode.jsWeb框架
- [AI開發]深度學習如何選擇GPU?AI深度學習GPU
- 如何選擇小程式軟體開發公司
- 為什麼要選擇Python進行Web開發?PythonWeb
- web?混合?原生?移動開發的三種模式選擇Web移動開發模式
- 開發?測試?新人入IT行業如何選擇?行業
- 商家要如何選擇小程式商城開發公司
- 測試開發的方向應該如何選擇?
- 前端-選擇開發工具前端
- 前端開發工具選擇前端
- 小程式開發選擇公司等於選擇人
- Node.js 和 Python之間如何進行選擇?Node.jsPython
- Web開發框架推導Web框架
- node express web開發框架ExpressWeb框架
- Web開發框架趨勢Web框架
- Web開發框架比較Web框架
- 如何選擇Web伺服器硬體配置?Web伺服器
- 巨型專案如何選擇合適的框架?框架
- 企業如何選擇低程式碼開發平臺