本文是2017年 JavaScript 框架回顧系列的最後的一篇文章,主要介紹 JavaScript 的後端框架情況。
從上圖中可以看到,Express 作為用 JavaScript 編寫的後端服務的主流解決方案,佔據了後端框架使用率的絕大部分,其次的四個最大框架對比於 Express 來說,佔用率都很小。
到目前為止,我們所討論的幾乎所有框架的絕對使用量都在不斷增加。自2013年以來,Express 的使用率已經增長了6000%。之所以 Express 的6000%增長在第一張圖中顯示成下降的狀態,是因為在同一時間內,總的 npm registry 增長了67,000%。也就是說,JavaScript 社群正在以程式語言史上前所未有的速度增長。
npm 的前端使用正在爆炸式增長
目前,大約83%的 npm 開發人員正在編寫執行在前端的 JavaScript,而只有41%的人正在為後端編寫程式碼(前後端開發者有重疊的部分)。前後端開發人員的比例為約為2:1,這也表明 npm 社群的未來在於前端的開發和工具製造。
接下來我們檢視其它的後端框架。
其他後端框架
下面是除 Express 之外的四個最大的後端框架,分別為:
- Koa
- Hapi
- Sails
- Next
koa
藍色代表的是 koa 的相對使用率情況。Koa 是 Express 的開發人員使用一套更緊密的設計原則編寫的,旨在建立一個更小、更富表現力同時也更健壯的 Web 框架。雖然 Koa 具有不低的使用量,但其增長速度還不是很快。
Hapi
Hapi 是一個用於構建應用和服務的豐富框架,Hapi 使得開發者更專注於編寫可複用的應用邏輯,而不必把時間花費在基礎設施的搭建上。2014年底,Hapi 有一個短暫的繁榮時期,然而自此之後,Hapi 的使用率就一直處於下滑狀態。
Sails
Sails 是 JavaScript 的 Ruby on Rails 克隆。儘管最初在2012年年底推出時,Sails 非常受歡迎,但它卻也遵循著“半衰期”的衰退模式,這也表明 Sails 不再被新專案採用。
Next.js
Next.js 是一個基於 React 的通用 JavaScript 框架,同時也是一個較新的框架。
Zeit 的開發團隊在 React 的基礎上建立了 Next.js。Next.js 提供了一種很方便的方式來建立新的 Web 應用。當前 Next.js 的使用率儘管還很低,但是卻一直保持著上升的趨勢,值得關注。
Npm 中的前後端對比
前面已經提到,當前前端開發者的數量遠超後端開發者的數量,但這種情況是否反映在 npm 的前後端安裝包數量上呢?
儘管前後端的安裝包也存在重疊的情況,但是整體數量還是後端安裝包數量高於前端。
npm 中的前端使用情況
2013年以前,npm 中的前端框架使用量非常大,Backbone 的流行也是促成這種情況的原因之一。但是,隨著 Express 和其它伺服器端框架的持續增長,Backbone 變得不那麼流行了。
npm registry 的前端使用率在經過兩年的下滑之後,2015年開始再次開始增長。
跟蹤 npm 前端的具體使用情況
為了弄清楚 npm 前端的具體使用情況,我們將關注於提供前端程式碼的一些庫,主要包括:
- Bable
- Webpack
- Browserify
- Bower
- RequireJS
- SystemJS
Bable
Babel 是一個轉譯器,用於將現代的 JavaScript 版本轉換為與 Node.js 中的伺服器端 JavaScript 以及瀏覽器相容的 JavaScript 舊版本。Babel 非常受歡迎,被用於前端和後端應用程式中。
Webpack
Webpack 是專門為瀏覽器提供 JavaScript 程式碼的工具。React 一直使用 Webpack 為瀏覽器服務做準備,很長一段時間,React 和 Webpack 都保持著相同的增長趨勢。
但是從2016年年中開始,Webpack 的使用率開始超過 React。這也表明,Web 開發人員已經開始更廣泛的採用 Webpack,而不僅僅是 React 應用程式。
Browserify
在 WebPack 成為流行的 JavaScript 程式碼工具之前,Browserify 一直是瀏覽器端轉化伺服器端 JavaScript 的重要工具。Browserify 也曾在2015年中期保持很高的受歡迎程度,但是從2016年開始,隨著 Webpack 的逐漸流行,Browserify 的受歡迎度出現了急劇下滑的現象。
這也許和兩個工具的設計目的有關。Browserify 為瀏覽器帶來了 Node.js API surface(包括用於許多後端的API),Webpack 則是一個更通用的模組系統和編譯工具,用於載入圖片、CSS和其它前端資源。因此,對於非 Node.js 開發者來說,Webpack 更為有用。隨著 npm Registry 前端使用的急劇增加,Webpack 已經成為一個非常有吸引力的選擇。
Bower
瀏覽器端模組化 JavaScript 的另一個解決方案是 Bower,Bower 將模組引入了瀏覽器。儘管 Bower 客戶端是由 npm Registry 託管和安裝的,但是 Bower 卻是一個完全獨立的非 npm 模組。
雖然 Bower 的開發人員認為其客戶端具有許多優秀的特性,但是他們還是贊同 CommonJS(大多數 npm 包所使用的 JavaScript 模組的格式)是一種更為靈活和流行的解決方案。Bower 的受歡迎程度自2014年起開始出現了持續的下滑。
RequireJS 和 SystemJS
Bower 的模組並不是 CommonJS 的唯一選擇,RequireJS 是另一種具有模組格式的可選方案。RequireJS 在2013年初很受歡迎,但自2014年之後,開始與 Bower 一同出現下滑。2015年釋出的 SystemJS 增長很緩慢。
Webpack 和 Express
目前,我們判斷 npm 前端使用量的最可靠依據就是 Webpack。相比於 Express 的相對使用率,可以看到,Webpack 在三年時間內,相對使用率迅速攀升到了 Express 的一半。
我們大膽預測 Webpack 將繼續增長,甚至可能會超過 Express,這也與我們所見到的 Webpack 的新使用者比例一致。幾年後,npm 將是一個主要的前端工具。
總結
npm 生態系統中前端和後端的使用量增長,對於 JavaScript 的整體而言都是一個好訊息。JavaScript 語言所具有的靈活性和易用性,是一種很大的優勢。
也許 JavaScript 的廣泛採用,正是由於 JavaScript 的內建特性很少,使得 JavaScript 語言在被使用時,有了很多的其它選擇。
現在 JavaScript 使用量正在急劇增長,npm 也在與之同步增長。