JavaScript框架、庫和工具的數量似乎已經超過了開發人員的數量。 2018年底,GitHub上的快速搜索顯示了230萬個JavaScript項目。 npm已成為全球最大的模塊系統,在npmjs.com上擁有70萬個可用軟件包,每月下載量達數十億次。
2018年12月6日:文章已更新,以反映JavaScript生態系統的當前狀態。今年的更新由Sencha贊助。感謝您支持使SitePoint成為可能的合作夥伴!
本文旨在解釋最流行的客戶端JavaScript框架、庫和工具的基本知識和基本區別。它們是否適合您是另一個問題。選擇一個並堅持一段時間。請注意,無論您選擇什麼,您最喜歡的選項都將被更“好”的東西所取代!
li.toc-h3 { margin-left: 20px; } li.toc-h4 { margin-left: 40px; } 關鍵要點
- 由於其高效的虛擬DOM和基於組件的架構,React仍然是構建用戶界面(特別是單頁應用程序)的首選。
- Vue.js因其簡單性和靈活性而受到好評,使其成為尋求易於與其他庫集成的漸進式框架的開發人員的絕佳選擇。
- Angular提供了一個全面的框架解決方案,尤其是在其最新版本(2 )中,它得到了Google的大力支持,並專注於TypeScript,這吸引了熟悉靜態類型語言的開發人員。
- jQuery儘管炒作有所下降,但在許多項目中仍然具有相關性和廣泛使用,因為它易於使用並且在各種Web平台上具有廣泛的兼容性。
- Webpack和ESLint被強調為現代JavaScript開發中必不可少的工具,分別用於模塊捆綁和代碼質量保證。
- Sencha Ext JS被認為是一個強大的企業級框架,它提供了廣泛的UI組件和工具,並具有強大的商業支持和培訓選項。
目錄
- 目錄
- 棘手的術語
- 庫
- 框架
- 工具
- 不要給我貼標籤!
- JavaScript框架和庫
- jQuery
- React
- AngularJS 1.x
- Angular 2 (現在是7.x)
- Vue.js
- Sencha Ext JS
- Lodash和Underscore
- Backbone.js
- Ember.js
- Knockout.js
- 值得關注的項目
- 工具:通用任務運行器
- Webpack
- Gulp.js
- npm
- Grunt
- 工具:模塊捆綁器
- Browserify
- RequireJS
- 工具:代碼風格檢查
- ESLint
- JSHint
- JSLint
- 工具:測試套件
- Jest
- Mocha
- Jasmine
- 工具:其他工具
- 總結和建議
- 評論
請在閱讀本文之前接受以下條款和條件! ……
- JavaScript環境每天都在變化。這篇文章發布的那一刻就會過時!
- 我所說的“最佳”是指“最流行/使用/炒作的通用項目”。所有項目都有免費/開源選項,但列表中可能不包含您最喜歡的項目。
- 已停止的項目(例如YUI)未包含在內,即使它們在網絡上的使用率仍然很高。
- 只參考客戶端項目。有些可以在服務器端工作,但列表不包括純服務器端框架,例如Express.js或Hapi。
- 有關每個項目的資料有意簡短,以便提供進一步研究的概述。
- 每個項目都提供一個使用流行度指標,但統計數據眾所周知難以整理,而且可能具有誤導性。
- 我有偏見。你也有偏見。其他人也有偏見!我沒有嘗試過這裡的每個工具,並將聲明我最喜歡的工具,但您應該根據您的需求做出自己的評估。
- 我和SitePoint都不對您做出的任何災難性決定負責!
棘手的術語
術語“框架”、“庫”和“工具”在不同的時間對不同的人可能有不同的含義,具體取決於上下文。此處使用的通用定義:
庫
庫是有組織的有用功能集合。典型的庫可能包括處理字符串、日期、HTML DOM元素、事件、cookie、動畫、網絡請求等的函數。每個函數都會向調用應用程序返回值,您可以根據自己的選擇實現這些值。可以把它想像成一系列汽車組件:您可以隨意使用任何組件來幫助構建一輛能正常行駛的汽車,但您必須自己構建發動機。
庫通常提供更高層次的抽象,從而簡化了實現細節和不一致之處。例如,可以使用XMLHttpRequest API實現Ajax,但這需要幾行代碼,並且瀏覽器之間存在細微差別。庫可以提供更簡單的ajax()函數,因此您可以專注於更高級別的業務邏輯。
庫可以將開發時間縮短20%,因為您不必擔心更精細的細節。缺點:
- 庫中的錯誤可能難以查找和修復
- 開發團隊無法保證會快速發布補丁
- 補丁可能會更改API並導致代碼發生重大更改。
框架
框架是應用程序的骨架。它要求您以特定方式處理軟件設計,並在某些點插入您自己的邏輯。通常會為您提供事件、存儲和數據綁定等功能。使用汽車的類比,框架提供了一個工作的底盤、車身和發動機。您可以添加、刪除或調整某些組件,前提是車輛仍然可以運行。
框架通常比庫提供更高層次的抽象,並且可以幫助您快速構建項目的最初80%。缺點:
- 如果您的應用程序超出了框架的範圍,那麼最後的20%可能會很困難——如果不是不可能的話
- 框架更新或遷移可能很困難
- 核心框架代碼和概念很少能很好地適應時代。開發人員總是會發現一種更好的方法來做同樣的事情。
工具
工具可以輔助開發,但不是項目不可或缺的一部分。工具包括構建系統、編譯器、轉譯器、代碼壓縮器、圖像壓縮器、部署機制等等。
工具應該提供更簡單的開發過程。例如,許多程序員更喜歡Sass而不是CSS,因為它提供了代碼分離、嵌套、渲染時變量、循環和函數。瀏覽器不理解Sass/SCSS語法,因此必須在測試和部署之前使用合適的工具將代碼編譯為CSS。
不要給我貼標籤!
庫、框架和工具之間的區別很少明確。框架可能包含庫。庫可以實現類似框架的方法。工具對於兩者都可能至關重要。我已經嘗試對每個項目進行標記,但范圍可能會有所不同。
如果這聽起來太複雜,您可以考慮編寫原生JavaScript。這很好,但是您最終會編寫自己的庫和/或框架代碼,這些代碼必須維護。 JavaScript本身是對瀏覽器和操作系統抽象之上的抽象!
JavaScript框架和庫
按使用/流行度/炒作的近似順序排列的項目……
jQuery
近年來,jQuery已逐漸不受開發人員青睞,但使用率仍然很高。對於需要少量JavaScript功能的項目,它仍然是一個可行的選擇。
優點:
- 分發大小小
- 學習曲線平緩,大量在線幫助
- 簡潔的語法
- 易於擴展
缺點:
- 為原生API增加了速度開銷
- 現在瀏覽器兼容性有所提高,因此不太重要了
- 使用率趨於平穩
- 行業對不必要使用的某些抵制。
React
React的使用率在統計數據中似乎很低,這可能是因為它用於應用程序而不是網站。近70%的開發人員聲稱他們有一些使用該庫的經驗。
優點:
- 小巧、高效、快速且靈活
- 簡單的組件模型
- 良好的文檔和在線資源
- 服務器端渲染是可能的
- 仍然很流行並且發展迅速
- 許多工作都為React開發人員做廣告
缺點:
- 需要學習新的概念和語法
- 構建工具是必不可少的
- 可能需要其他庫或框架來提供模型和控制器方面
- 可能與修改DOM的代碼和其他庫不兼容
AngularJS 1.x
儘管發布了2.0版(現在是4.0版!),但Angular 1.x仍在開發中。困惑?見下文……
優點:
- 幾家大型公司採用的一種流行框架
- 創建現代Web應用程序的單一解決方案
- 是“標準”MEAN堆棧(MongoDB、Express.JS、AngularJS、NodeJS)的一部分,因此有許多文章和教程可用
缺點:
- 比其他替代方案的學習曲線更陡峭
- 代碼庫龐大
- 無法升級到Angular 2.x
- 儘管是Google項目,但Google似乎沒有使用它?
Angular 2 (現在是7.x)
Angular 2 與v1完全不同。兩者都不兼容——也許Google應該為該項目起一個不同的名字? !
優點:
- 創建現代Web應用程序的單一解決方案
- 仍然是MEAN堆棧的一部分,儘管可用的Angular 2 教程較少
- 對於熟悉靜態類型語言(如C#和Java)的人來說,TypeScript提供了一些優勢。
缺點:
- 比其他替代方案的學習曲線更陡峭
- 代碼庫龐大
- 無法從Angular 1.x升級
- 與1.x相比,Angular 2.x的採用率相對較低
- 儘管是Google項目,但Google似乎沒有使用它?
Vue.js
Vue.js使用HTML模板語法將DOM綁定到實例數據。當數據更改時,模型是更新視圖的普通JavaScript對象。其他工具提供用於腳手架、路由、狀態管理、動畫等的工具。
優點:
- 快速採用和日益普及
- 易於上手,開發人員滿意度高
- 輕量級、依賴性小、性能好
缺點:
- 可能被React所掩蓋
- 對單個開發人員的更新有所依賴
- 資源少於替代方案
Sencha Ext JS
Ext JS是此處唯一提供商業培訓和支持的框架。還可以選擇讓Sencha團隊幫助審查您的代碼、自動化測試以及遷移到其他平台。
優點:
- 廣泛的可用的組件
- 包含創建Web和移動應用程序所需的一切
- 腳本自定義、設計工具和快速原型
- 提供用於直觀構建和設置樣式的Web應用程序的工具
- 商業支持和優秀的文檔
- 30天免費試用版和適用於小型應用程序的社區版(每年收入低於10,000美元)
缺點:
- 截至目前,與React和Angular以外的框架的集成可能不切實際——請參閱Ext JS 7的路線圖計劃
- 深度自定義UI更改可能很困難
Lodash和Underscore
客戶端使用率較低,但任一庫都可以用於服務器端Node.js應用程序。
優點:
- 小巧簡單
- 易於學習,文檔良好
- 與大多數庫和框架兼容
- 不擴展內置對象
- 可以在客戶端或服務器端使用
缺點:
- ES2015及更高版本的JavaScript中提供了一些方法。
Backbone.js
Backbone.js聲稱是一個庫,因為它可以與其他項目集成。我懷疑大多數開發人員認為它是一個框架,儘管它不如其他一些框架那麼武斷。
優點:
- 小巧、輕量級且不太複雜
- 不向HTML添加邏輯
- 優秀的文檔
- 已被許多應用程序採用,包括Trello、WordPress.com、LinkedIn和Groupon
缺點:
- 比AngularJS等替代方案的抽象級別更低(但這可以被認為是一個優勢)
- 需要其他組件來實現諸如數據綁定之類的功能
- 最近的框架已經遠離MVC架構
Ember.js
優點:
- 為客戶端應用程序提供單一解決方案
- 開發人員可以立即提高生產力——它使用jQuery
- 良好的向後兼容性和升級選項
- 採用了現代Web開發標準
缺點:
- 分發文件較大
- 與其他正在轉向更小組件結構的框架相比,它被認為是整體式的
- 學習曲線陡峭——這是Ember的方式,或者根本沒有方式
Knockout.js
優點:
- 小巧輕便,沒有依賴項
- 優秀的瀏覽器支持,可追溯到IE6
- 優秀的文檔
缺點:
- 大型項目可能會變得複雜
- 開發速度減慢
- 使用率似乎正在下降
值得關注的項目
渴望了解更多?以下項目不太流行,但值得考慮:
- Polymer——一個啟用HTML5 Web組件跨瀏覽器支持的庫
- Meteor——一個用於Web應用程序的全棧平台。
- Aurelia——一個輕量級、跨平台的框架
- Svelte——一個相當新的項目,它將框架源代碼轉換為類似原生的JavaScript
- Conditioner.js——一個新的庫,它根據狀態自動加載和卸載模塊。
工具:通用任務運行器
構建工具自動化各種Web開發任務,例如預處理、編譯、模塊捆綁、圖像優化、代碼壓縮、代碼風格檢查和運行測試。任務通常在一個可執行包中一起管理。最流行的選項:
Webpack
Gulp.js
npm
Grunt
工具:模塊捆綁器
管理多個JavaScript文件可能會變得很麻煩。除非您可以本機採用相對較新的ES6模塊導入語法,否則必須按適當的順序加載或連接瀏覽器中的JavaScript依賴項。如果您需要支持舊版瀏覽器(2018年之前發布的任何瀏覽器),可以使用模塊捆綁器,但對這些工具的需求會隨著時間的推移而減少。
Browserify
RequireJS
工具:代碼風格檢查
代碼風格檢查分析您的代碼是否存在潛在錯誤或與語法標準的偏差。您將永遠不會錯過右括號或未聲明的變量!
ESLint
JSHint
JSLint
工具:測試套件
測試驅動開發要求您在開始編寫代碼之前編寫代碼來測試您的代碼。歡迎您編寫代碼來測試您的測試代碼!
有很多選項,包括Ava、Tape和Jasmine,但目前三個最流行的選項是……
Jest
Mocha
Jasmine
工具:其他工具
儘管我盡了最大努力,但我承認並非每個人都喜歡JavaScript! TypeScript、LiveScript和CoffeeScript等編譯器可以使您的開發生活更愉快一些。或者,考慮使用Babel將現代、簡潔的ES2015源代碼轉換為跨瀏覽器兼容的ES5代碼。
有許多JavaScript驅動的HTML模板引擎,包括Mustache、Handlebars、Pug(Jade)和EJS。我更喜歡保留JavaScript語法的輕量級選項,例如EJS和doT。
最後,為什麼編寫您自己的文檔,當您可以自動化它時?兼容ES2015的文檔生成器包括ESDoc、JSDoc、YUIdoc、documentation.js和Transcription。
總結和建議
如果您遵循大眾的智慧,那麼目前的勢頭是在React後面,其他庫也在朝著類似的技術方向發展。這是一個安全的職業選擇,但您也應該考慮Vue.js或與React兼容但更小的Preact。
整體式框架已不受歡迎,但是,如果您需要為大型項目提供嚴格的結構,AngularJS仍然是一個流行的選擇。大多數開發人員堅持使用1.0版,但這可能是出於必要而不是選擇。從長遠來看,2 版可能是更安全的選擇,但您需要學習TypeScript。
對於希望同時擁有框架和預構建的集成組件和工具(包括訪問商業支持)的公司(小型企業到企業),Sencha的Ext JS是一個不錯的選擇。 Ext JS還可以輕鬆地將其強大的組件庫與React和Angular集成,對於希望實現預構建組件而不是自己構建組件的開發人員來說,這是一個不錯的選擇。
不要忽視jQuery。它並不時尚,很少在技術新聞中提及,但它正在積極開發中,並且對於網站和應用程序來說綽綽有餘。 jQuery的學習曲線平緩,並且為全球許多開發人員所理解。
如果您想冒險,Svelte和Rawact等新的轉譯器選項會將框架代碼轉換為原生JavaScript。框架依賴項已刪除,代碼更小,運行速度更快。
工具的選擇不太重要,並且可能因項目而異。大多數Webpack、Gulp或npm腳本。對於測試,您可以使用ESLint和Jest,但還有許多其他替代方案可以嘗試。
也就是說,每個項目、團隊和技能組合都是不同的。您只有有限的時間來進行評估,因此使用您所知道的知識很誘人。這篇文章將收到評論,推薦FrameworkX,但是當您有錘子時,一切看起來都像釘子。
最後,永遠不要忘記庫、框架和工具是可選的! 在過去十年中,JavaScript開發發生了革命性的變化;我們從幾個基本的輔助庫發展到令人難以置信的選擇。很容易陷入複雜性不斷增加的陷阱,或者每隔幾個月就切換到最新的熱門框架。始終考慮原生JavaScript——尤其是在小型和個人項目中。您獲得的知識不會過時,並且在為其他項目評估框架時將變得非常寶貴。
我是否遺漏了、駁回了或未能讚揚您最喜歡的JavaScript庫、框架和工具的優勢?當然,我做到了! 歡迎評論……
關於頂級JavaScript框架、庫和工具的常見問題
Angular和React的主要區別是什麼?
Angular和React都是流行的JavaScript框架,但它們有一些關鍵區別。由Google開發的Angular是一個成熟的MVC框架,它提供了一套強大的功能來構建複雜的應用程序。它使用雙向數據綁定和真實DOM。另一方面,由Facebook開發的React是一個用於構建用戶界面的庫。它使用單向數據綁定和虛擬DOM,這使其在渲染大型列表和數據集時更快、更高效。
如何為我的項目選擇合適的JavaScript框架?
選擇合適的JavaScript框架取決於幾個因素。您應該考慮項目的規模和復雜性、框架的學習曲線、社區規模和可用資源以及應用程序的性能和可伸縮性需求。同樣重要的是要考慮框架的長期可行性,因為您希望選擇一個將來會繼續得到支持和更新的框架。
與其他JavaScript框架相比,使用Vue.js有哪些優勢?
Vue.js以其簡單易用而聞名。它有一個平緩的學習曲線,使其成為初學者的一個不錯的選擇。它還具有靈活的架構,允許您在輕量級、類似庫的設置或功能齊全的框架設置之間進行選擇。 Vue.js還使用虛擬DOM,並提供高效的重新渲染和組件級緩存以實現快速性能。
Node.js在JavaScript開發中的作用是什麼?
Node.js是一個運行時環境,允許在服務器端運行JavaScript。這意味著您可以使用JavaScript構建應用程序的前端和後端,從而提高開發效率並簡化代碼維護。 Node.js還擁有龐大的庫和工俱生態系統,並且以其高性能和可伸縮性而聞名。
在使用JavaScript框架時,學習TypeScript有多重要?
TypeScript是JavaScript的超集,它向語言添加了靜態類型。學習TypeScript來使用JavaScript框架並不是必需的,但它可能會有益。 TypeScript可以幫助在編譯時而不是運行時捕獲錯誤,從而產生更健壯的代碼。在處理大型代碼庫和團隊時,它尤其有用。
使用Lodash之類的JavaScript庫有哪些好處?
Lodash是一個實用程序庫,它提供有用的方法來操作JavaScript中的數組、對象和其他數據類型。它可以幫助使您的代碼更簡潔、更易讀和更高效。 Lodash方法也針對性能進行了優化,因此在某些情況下它們可能比本機JavaScript方法更快。
Ember.js與其他JavaScript框架相比如何?
Ember.js是一個功能齊全的框架,它提供了許多內置功能,例如路由器和數據層。這可以使構建複雜的應用程序更容易,但這也意味著需要學習更多內容。 Ember.js遵循約定優於配置的原則,這可以加快開發速度,但可能不如其他框架靈活。
Polymer庫的關鍵特性是什麼?
Polymer是由Google開發的一個用於構建Web組件的庫。它提供了一組用於創建自定義HTML元素、將CSS和JavaScript封裝在這些元素中以及使用數據綁定和事件處理的功能。 Polymer還支持單向和雙向數據綁定。
jQuery如何在現代JavaScript環境中發揮作用?
jQuery是一個簡化HTML文檔遍歷、事件處理和動畫的庫。雖然由於原生JavaScript的改進和現代框架的興起,它不像以前那麼必要了,但jQuery仍然被廣泛使用,並且對於更簡單的項目或維護遺留代碼來說是一個不錯的選擇。
一些值得關注的新興JavaScript框架和庫有哪些?
一些新興的JavaScript框架和庫包括Svelte,這是一個基於編譯器的框架,旨在提供更簡單、更快速的開發體驗;Next.js,一個用於服務器端渲染React應用程序的框架;以及Gatsby,一個基於React的靜態站點生成器。這些工具正在越來越受歡迎,並且將來可能會變得更重要。
以上是2019年最佳JavaScript框架,庫和工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具