VOOZH about

URL: https://read01.com/Ke7GxA.html

⇱ 2017年最佳JavaScript框架,庫和工具 - 壹讀


Saturday, Apr 11, 2026

2017年最佳JavaScript框架,庫和工具

2017/06/10 來源:前端頭條
👁 Image
...

JavaScript框架,庫和工具似乎比他們的開發人員多出很多。截至2017年5月,在 GitHub 上快速搜索 JavaScript 項目顯示已經超過110萬個。npmjs.org 有 50 萬個可用的軟體包,每月下載量近100億次。

2017.05.29:該文章已更新,以反映 JavaScript 生態的當前狀態。

本文將努力解釋最流行的客戶端 JavaScript 框架、庫和工具之間的基本內容和差異。他們對你來說是否是 「最好的」 選擇是另一個問題。選擇一些東西,堅持一段時間。你需要知道的是:你最喜歡的選項終將被「更好」的東西取代,無論你選擇什麼!

在閱讀本文之前請接受以下術語和情況…!

  • JavaScript 生態社區每天都會發生變化。這篇文章可能在發布時就已經過時了!
  • 我說的 「最好的」 指的是 「最受歡迎的通用項目」 。所有都是免費 / 開源 的,但你肯能不認同這個列表。
  • 停止的項目,如 YUI 不包括在本列表內,即使它們現在可能依然有很高的使用量。
  • 僅引用客戶端項目。有些可以在伺服器端工作,但該列表不包括純粹的基於伺服器的框架,如 Express.jsHapi
  • 關於每一個項目的信息都是有意為之提供一個概述以便進行進一步的研究。
  • 每個項目都提供了使用流行指標,但統計數據難以整理,可能會造成誤導。
  • 我有偏見,你有偏見,每個人都有偏見!我沒有在這裡嘗試過每一個工具,所以不會說明我最喜歡哪個,但你應該根據你的要求自行評估。
  • 我和該網站都不對你做出的任何選擇使用的決定負責!
棘手的術語

術語「framework(框架)」,「library(庫)」和「tool(工具)」 可以根據情境,在不同時期,對不同的人,意味著不同的東西。這裡使用的一般定義如下:

Libraries(庫)

庫是有用功能的有組織的集合。一個庫的典型功能包括處理字符串、日期、HTML DOM元素、事件、Cookie、動畫、網絡請求等等。每個函數都將值返回給調用應用程式,該應用程式可以在您選擇的情況下實現。你可以把它想像成汽車零件的選擇:你可以自由地使用任何零件來建造一輛能跑的車,但是你必須自己造一個引擎。

庫通常是提供一個更高的抽象層,平滑的實現細節和矛盾。例如,Ajax通常依賴於 XMLHttpRequest API ,但這需要幾行代碼,並且在不同的瀏覽器之間存在細微的差異。但是庫可以提供一個更簡單的ajax函數,讓程式設計師更專注於高層次的業務邏輯。

一個庫可以將開發時間縮短20%,因為您不必擔心細節問題。但是它也不是沒有缺點的:

  • 庫內的錯誤可能難以定位和修復
  • 開發團隊不能保證快速發布補丁
  • 修補程序可能會更改API,並對您的代碼進行重大更改。

框架是一個應用程式的骨架。它要求您以一種特定的方式來處理軟體設計,,並在某些點插入您自己的邏輯。通常為您提供諸如事件、存儲和數據綁定之類的功能。使用汽車類比,那麼框架提供了一輛車的底盤,車身和發動機。 為了讓車輛始終保持運行狀態,你可以添加、刪除或修改某些組件。

框架通常比庫提供更高的抽象層,並且可以幫助您快速構建項目的 80%。但它的缺點是:

  • 如果應用程式超出了框架的範圍,那麼剩下的20%可能會很難完成;
  • 框架更新可能很困難 ;
  • 框架核心代碼和概念很少更新,但是同樣的事情,程式設計師往往都會在短時間內發現一個更好的解決方式;

Tools(工具)

工具有助於開發,但不是項目的一個組成部分。工具包括系統構建、編譯器、轉譯器、代碼壓縮、圖像壓縮、部署機制等等。

工具應該提供一個更容易的開發過程。 例如,許多程式設計師喜歡用 Sass 編譯成CSS,因為它提供了代碼分離,嵌套,渲染時變量,循環和函數。 瀏覽器不了解 Sass / SCSS 語法,因此在測試和部署之前,必須使用適當的工具將代碼編譯為 CSS。

不要去標記項目類型

庫,框架和工具之間的區別很少。框架可以包括一個庫。庫可以實施類似框架的方法。對於前面二者來說,工具又是必不可少的。

我試圖標記每個提到的項目,看看他們屬於庫,框架還是工具,但尺度不同,標記的類型也可能會有所不同。

如果這聽起來太複雜,可以考慮編寫 vanilla JavaScript。沒關係,但是您將不可避免地編寫自己的庫 和/或 框架代碼。JavaScript 本身就是一種瀏覽器和作業系統抽象塔的抽象!

JavaScript 框架和庫

項目根據流行度排序…

jQuery

官網
中文文檔 jQuery API 中文文檔 v3.2.1
代碼倉庫 github.com/jquery/jquery
當前版本 3.2.1
開發者 jQuery team
發布日期 August 2006
文件尺寸 30kb min
用途 通用

jQuery 仍然是最常用的 JavaScript 庫,WordPress,ASP.NET和其他幾個框架的創建和分發都依賴於它。它徹底改變了客戶端的開發,將 CSS 選擇器引入到 DOM 節點檢索加連結來應用事件處理程序、動畫和Ajax調用。

雖然 jQuery 最近幾年失寵,但對於需要少量 JavaScript 功能的項目來說,它仍然是一個可行的選擇。

優點:

  • 分布規模小
  • 學習曲線平緩,在線幫助多
  • 語法簡潔
  • 容易延伸

缺點:

  • 增加了本機API的速度開銷
  • 瀏覽器兼容性的改善降低了它的性能
  • 用法扁平
  • 有些開發人員抵制使用

React

類型 library
官網 facebook.github.io/react/
中文文檔 React 中文文檔 v15.5.4
代碼倉庫 github.com/facebook/react
當前版本 15.5.4
開發者 Facebook 與 貢獻者
發布日期 March 2013
文件尺寸 21kb min
用途 單頁面應用
使用率 low

React 也許是過去一年裡最受關注的庫了吧。React 是一個用於構建用戶界面的 JavaScript 庫,它專注於 MVC 模式(Model-View-Controller) 的 「View」 部分,並且可以輕鬆創建保留狀態的 UI 組件。 它是實現虛擬 DOM 的第一個庫, 內存結構計算差異,有效地更新頁面。

從統計數據中看,反應的使用似乎很低,可能是因為它更多的在應用程式中使用,而不是網站上使用。38%的程式設計師表示他們正在使用該庫(愚人碼頭註:譯文)

  • 小巧,高效,快捷靈活
  • 簡單的組件模型
  • 良好的文檔和在線資源
  • 適用於伺服器端渲染
  • 處於高速發展期
  • 需要學習新的概念和語法
  • 構建工具必不可少
  • 要求其他庫或框架提供 Model 和 Control
  • 與修改 DOM 的代碼和其他庫不兼容

本節將 Lodash 和 Underscore 放在一起,因為它們提供了數百個功能性的 JavaScript 實用程序來補充原生字符串,數字,數組和其他原始對象的方法。二者有一些功能性的重疊,所以你不太可能在一個項目中同事需要這兩個庫。

它在客戶端使用率似乎很低,但是可以在伺服器端的 Node.js 應用程式中使用這兩個庫。

優點:

  • 小而簡單
  • 擁有優質文檔,易於學習
  • 與大多數庫和框架兼容
  • 不擴展內置對象
  • 可以在客戶端或伺服器上使用

缺點:

  • 有些方法只適用於ES2015及更高版本的 JavaScript

AngularJS 1.x

在這個列表中,Angular是第一個框架(或MVC應用程式框架)。最流行的版本是 1.x 版本,它使用雙向數據綁定擴展 HTML ,同時將 DOM 操作與應用程式邏輯分離 。

儘管版本2(現在是版本4!)已經發布,Angular 1.x仍在開發中。 見下文…

優點:

  • 眾多大公司採用
  • 以單一的解決方案來生產現代 Web 應用程式
  • 「標準」 MEAN 堆棧(MongoDB,Express.JS,AngularJS,NodeJS) 的一部分,有眾多文檔和教程可用來參考
  • 學習曲線更加陡峭
  • 代碼庫很大
  • 不能升級到Angular 2.x

Angular 2.0 於 2016 年 9 月發布。這是一次完全的重寫,它引入了基於模塊化組件的模型,使用 TypeScript(被編譯為JavaScript )創建。讓人困惑的是,版本 4.0 於 2017 年 3 月發布( v3 被跳過以避免語義版本的問題)。

Angular 2+ 與 v1 截然不同。與其他也不兼容 – 也許 Google 應該給該項目另外起一個名字。

  • 單一的解決方案來生產現代Web應用程式;
  • 儘管 Angular 2+ 教程 較少,但它仍是 MEAN 堆棧的一部分
  • 對於熟悉靜態類型語言(如 C# 和 Java )的人員,TypeScript 提供了一些優勢

缺點:

  • 更陡峭的學習曲線
  • 代碼庫很大
  • 不能從 Angular 1.x 升級
  • 與 1.x 相比,Angular 2.x 的使用率相對較低
  • 儘管是Google的項目,但 Google 似乎並沒有使用它?

Vue.js

Vue.js

Vue.js 是一個用於構建用戶界面的輕量級漸進式框架。core(核心) 提供了一個類似於 React 的虛擬 DOM 視圖層,它可以與其他庫集成,但它也能支持單頁應用程式。該框架由以前在 AngularJS 工作過的 Evan You 創建,所以該框架提取了 AngularJS 中作者喜歡的部分。

Vue.js 使用 HTML 模板語法將 DOM 綁定到實例數據。模型是在更改數據時更新視圖的純 JavaScript 對象。附加工具提供了腳手架,路由,狀態管理,動畫等功能。

優點:

  • 易於上手,普及度高
  • 起點簡單,但完成滿意度高
  • 依賴性小,性能好
  • 是一個新項目,所以風險可能會很大
  • 依賴開發人員來更新
  • 相對同類框架,資源較少;(愚人碼頭註:在國內似乎不存在這個缺點)
Backbone.js
最新版本 1.3.3
開發者 Jeremy Ashkenas
發布日期 2010年10月
文件大小 8kb min
用途 單頁應用

Backbone.js 是提供常見的伺服器端框架MVC結構最早的客戶端選項之一,它唯一的依賴是由同一開發人員創建的 Underscore.js 。

Backbone.js 聲稱是一個庫,因為它可以與其他項目集成,但我認為大多數程式設計師都認為它是一個框架。

優點:

  • 體積小,重量輕,複雜度低
  • 不添加HTML的邏輯
  • 文檔豐富
  • 採用了許多應用,包括 Trello ,WordPress.com ,LinkedIn 和 Groupon
  • 與 AngularJS 等相比,抽象度較低
  • 需要額外的組件來實現數據綁定等功能
  • 新的框架基本已經不再採用 MVC 架構
Ember.js

Ember.js是基於Model-View-ViewModel(MVVM)模式的框架之一。 它在單個包中實現模板化,數據綁定和庫。如果 Ruby on Rails體驗的用戶,能夠迅速熟悉其配置概念。

優點:

  • 為客戶端應用程式提供單一解決方案
  • 程式設計師可以快速開發—其使用 jQuery
  • 良好的向後兼容性和升級選項
  • 採用了現代 Web 開發標準
  • 大分配 large distributable
  • 與其他正在向較小組件結構移動的框架相比,被認為是單一的
  • 陡峭的學習曲線

Knockout.js

Knockout.js
最新版本 3.4.2
開發者 Steve Sanderson
發布日期 2010年7月
文件大小 59kb min
用途 單頁應用

較早的MVVM框架之一,Knockout.js 使用觀察者來確保 UI 與底層數據保持同步。它具有模板和依賴關係跟蹤。

優點:

  • 小而輕便,無依賴
  • 支持回溯到IE6
  • 優質文檔

缺點:

  • 較大的項目可能變得複雜
  • 發展速度已經放緩
  • 使用情況正在下降

值得注意的項目

如果你希望了解更多項目?以下項目不太受歡迎,但值得考慮:

Tools(工具):通用的任務執行工具

構建工具可自動執行各種 Web 開發任務,例如預處理,編譯,優化圖像,壓縮代碼,代碼檢查,運行測試等。所有的任務都可以在一個可執行包中管理,最受歡迎的選擇包括:

Gulp.js

Gulp.js
官網
倉庫地址 github.com/gulpjs/gulp
最新版本 3.9.1
月下載量 300萬

Gulp 雖然它不是第一個任務執行工具,但它很快就成為了最受歡迎的工具,也是我個人最喜歡的任務執行器。Gulp 使用易讀的 JavaScript 代碼,它將源文件加載到一個流中,並通過各種插件將數據輸出到構建文件夾中。這是一種簡單、快速和有趣的方式,所以我把 Gulp.js 放在其他工具選項之前。

npm

最新版本 4.5.0
月下載量 300萬

npm 是 Node.js 包管理器,但是它的 scripts 功能可以用於通用的任務執行。對於那些沒有多少依賴性的簡單項目來說,這是一個很不錯的選擇。然而,對於複雜的任務來說,它可能就有些力不從心。

Grunt

官網
倉庫地址 github.com/gruntjs/grunt
最新版本 1.0.1
月下載量 200萬

Grunt 是第一個實現批量執行的 JavaScript 任務執行器,但速度和複雜的JSON配置導致了 Gulp 的崛起。現在,最糟糕的問題已經解決,Grunt 仍然是一個不錯的選擇。

Tools(工具):模塊打包工具

管理多個 JavaScript 文件是一件繁瑣的事情。在默認情況下,瀏覽器文件未被編譯,因此依賴關係必須以適當的順序加載或連接。

雖然有很多選項,如 ES6 ModulesCommonJS ,但瀏覽器支持是有限的,因此模塊打包工具變得至關重要。

Webpack

官網 webpack.js.org
中文文檔 webpack 中文文檔 v2.2
倉庫地址 github.com/webpack/webpack
最新版本 2.5.1
月下載量 600萬

Webpack 支持所有流行的模塊選項,並成為 React 開發的代名詞。儘管他聲稱自己是一個模塊打包工具,但是 Webpack 可以作為一個通用的任務執行工具使用。

Browserify

官網 browserify.org
倉庫地址 github.com/substack/node-browserify
最新版本 14.3.0
月下載量 260萬

Browserify 支持 Node.js 使用的 CommonJS 模塊,將所有模塊編譯成單個瀏覽器兼容的文件。

RequireJS

官網 requirejs.org
倉庫地址 github.com/jrburke/r.js
最新版本 2.3.3
月下載量 100萬

RequireJS 是一個瀏覽器中的模塊加載器,它也可以在Node.js中使用。

Tools(工具):代碼檢查工具(Linting)

愚人碼頭註:很多編輯器,IDE都集成了這類相關的工具,或許對你來說這些工具挺陌生,但是其實你一直在使用。

「Linting」 是分析你的代碼中潛在錯誤 或 偏離語法標準的隱患。有了這種工具,你永遠不會遺漏一個結束括號 或 未聲明一個變量!

ESLint

官網 eslint.org
倉庫地址 github.com/eslint/eslint
最新版本 3.19.0
月下載量 600萬

ESLint 是一種插件式的代碼檢查工具,每個規則都是一個插件,因此可以根據你的喜好進行配置。

JSHint

官網
倉庫地址 github.com/jshint/jshint
最新版本 2.9.4
月下載量 200萬

一個靈活的 JavaScript 代碼檢查工具,它能在真正的錯誤 和 看似錯誤的語法需求之間找到一個平衡點。JSHint是我個人最喜歡的。

JSLint

官網
倉庫地址 github.com/reid/node-jslint
最新版本 0.10.3
月下載量 5萬

這是最先實現一套嚴格默認規則的代碼校驗工具之一,但是這對於我是使用場景貌似不太一致(我不喜歡使用這個工具)。

Tools(工具):測試套件

測試驅動開發(Test-Driven-Development) 需要求你在開始編寫代碼之前,首先編寫測試代碼來測試你的代碼。也歡迎你編寫代碼來測試你的測試代碼!

代碼測試的工具有很多,如 AvaTapeJest,但最流行的三個選項是:

Mocha

官網 mochajs.org
倉庫地址 github.com/mochajs/mocha
最新版本 3.3.0
月下載量 500萬

Mocha 是一個 JavaScript 測試框架,可以在 Node.js 或 瀏覽器 中運行測試。js或瀏覽器。它支持異步測試,經常與 Chai 搭配,以使測試代碼以一種可讀的方式表達。

Jasmine

官網 jasmine.github.io
倉庫地址 github.com/jasmine/jasmine-npm
最新版本 2.6.0
月下載量 200萬

Jasmine 是一個行為驅動的測試套件,可以在瀏覽器中自動測試你的UI和交互。

QUnit

官網
倉庫地址 github.com/kof/node-qunit
最新版本 1.0.0
月下載量 2.5萬

毫無疑問,QUnit是一個單元測試框架,它可以在傳遞特定參數時檢查函數結果。它還將報告測試覆蓋率,以確保您沒有遺漏特定的代碼分支。

Tools(工具):其他測試工具

儘管我盡了最大的努力,但我也不是每個人都喜歡 JavaScript !諸如 TypeScriptLiveScriptCoffeeScript 等編譯器可以使你的開發生活更加愉快。或者,考慮一下 Babel 轉譯工具,它可以將現代的、簡潔的 ES2015 原始碼轉譯為跨瀏覽器兼容的 ES5 代碼。

有幾十種 JavaScript 驅動的 HTML 模板引擎,包括 MustacheHandlebarsPug (Jade)EJS 。但就我而言,更喜歡保留 JavaScript 語法(如 EJSdoT )的輕量級選項。

最後,當你可以自動化生成文檔時,為什麼要自己編寫呢?與ES2015兼容的文檔生成器包括 ESDocJSDocJSDoc 中文文檔) ,YUIdocdocumentation.jsTranscription

總結與建議

如果你想跟上在技術的潮流,那麼 React 以及和其相關的技術發展方向值得關注。如果你想要為Web應用程式選擇一個安全、通用的選項,那麼你可以考慮 Vue.js

雖然整體框架現在不再那麼受歡迎,但是如果你是要做嚴格的大型項目結構,AngularJS 會是一個不錯的選擇。雖然,現在大多數人還在使用 1.0 版本,但是可能不是長久之計。從長遠來看,學習一下 TypeScript ,選擇 4.0 版本會更加安全。

不要貶損 jQuery 。它雖然已經不怎麼流行了,在技術媒體上也很少提及,但它還在積極的開發維護,而且完全能夠勝任網站和應用程式的開發。jQuery 學習曲線平緩,並且全世界的許多開發人員都可以很好的理解。

如果你敢於冒險,喜歡嘗鮮,Svelte 是一個有趣的 客戶端/伺服器 選項它在構建時預先渲染 JavaScript,並可能改變我們開發的方式。

工具的選擇會因項目而異。大多數使用的是 Gulp ,但是 WebPack 越來越受歡迎。你可以用 ESLintMocha 進行測試,但是有很多其他的選擇。

也就是說,每個項目、團隊和技能都是不同的。你的評估時間有限,所以你很容易使用你所知道的東西。這篇文章將會接受評論和建議,但是當你有一把錘子的時候,一切看起來都像釘子。

最後,不要忘記庫、框架和工具是可選的!在過去的十年中,JavaScript 的開發已經發生了革命性的變化; 我們已經從幾個簡陋的輔助庫選擇的時代進入到了一個壓倒性的選擇的時代。所以很容易陷入日益複雜的陷阱,或者每隔幾個月就切換到最新最熱框架。對於小型的或簡單的任務考慮使用輕量級的 JavaScript 庫或框架。在為其他項目選擇框架時,現有的知識不會變成無價之寶。

我是否錯過了你最喜歡的JavaScript庫、框架或工具?我當然有!歡迎評論…

原文連結:

您可能感興趣
免責聲明:本文內容來源于前端頭條,文章觀點不代表壹讀立場,如若侵犯到您的權益,或涉不實謠言,敬請向我們提出檢舉
最新文章 / 服務條款 / 私隱保護 / DMCA / 聯絡我們

壹讀/READ01.COM