成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

淺談JavaScript工具鏈不完全指南

瀏覽:4日期:2023-06-04 09:38:23
概述

淺談JavaScript工具鏈不完全指南

在 JavaScript 語言日漸強大的同時,與其配套的開發工具也蓬勃發展?,F在的 Web 前端項目,早已不是寫幾個 HTML 頁面,加點 CSS 和 JS 就完事了。隨便一個實用的項目,可能都需要用到一些框架和第三方庫,以及相應的腳手架、依賴包管理、預編譯、構建打包、壓縮合并等等工具。純手工完成這些任務,已經幾乎不太可能了。

科學技術是第一生產力,而工具就是其中的一個體現。工欲善其事必先利其器,既然工具解放了人力,我們就應該擁抱它們。本文總結了圍繞 JavaScript 的一系列工具,看看一個常見的項目到底需要用到哪些工具。

靜態類型檢查

JavaScript 本身是一門動態腳本語言,是弱類型的。也就是說,沒有編譯階段的數據類型檢查,只能在運行時確定類型。好處是比較靈活,簡單易學,代碼量也比較少。缺點也是明顯的,就是稍不注意容易出 bug,特別是大型項目,如果沒有開發規范,任由開發人員自由發揮,維護起來簡直就是災難。為了彌補這個缺陷,一些自帶類型系統、可轉譯成 JavaScript 的語言出現了。

Flow:Facebook 出品,用 OCaml 寫的 JavaScript 靜態類型檢查系統。支持類型系統、類型標注,可定義 library,提供代碼 lint 等。Vue.js 2.x 就是用 Flow 寫的。不過,Vue 3.0 改用另一種靜態類型語言了,那就是 TypeScript。

TypeScript:TypeScript 是微軟開發的語言,是 JavaScript 的超集,能夠編譯成 JavaScript。現在 TypeScript 越來越流行,獲得了大量項目的認可。

代碼風格檢查(Linter)

由于JavaScript 動態語言的特性,在寫法上過于靈活,往往導致多人協作的項目代碼風格各異,給維護和擴展帶來不少麻煩。另外,部分語言特性容易導致 bug,最佳實踐里通常不推薦使用。因此,代碼 Lint 工具就派上用場了。它不但可以檢查代碼書寫格式,還可以檢查出引用未定義的變量等低級錯誤。

曾經出現過很多種 Lint 工具,比如 JSLint、JSHint、StandardJS、JSCS 等等,現在有大一統的趨勢,基本都用 ESLint 了。

剛開始用 Lint 工具的時候可能會不適應,因為限制太多,動不動就警告和報錯。但從長遠來看,JavaScript 項目引入 Linter 還是有必要的。

包管理器

JavaScript 之所以能夠遍地開花,很大程度是因為技術生態非常繁榮,各種第三方庫應有盡有。如此龐大的第三方庫集合,勢必需要一個管理平臺,負責第三方包的托管、版本管理、下載安裝和依賴管理等。

npm:JavaScript 包管理器的集大成者,目前最主流的工具。 基于 Node.js,包含網站和 CLI,上面的包總數超過 100萬,基本涵蓋了 JavaScript 項目所需的方方面面。

yarn:2016 年 Facebook 推出的包管理器,跟 npm registry 兼容,主打 CLI 的快速、安全和確定性。

bower:曾經比較流行,用于管理前端的 JavaScript 包,因為當初 npm 只支持 node 環境的包管理。隨著 npm 和 yarn 同時支持 node 和瀏覽器端的包管理,bower 也逐漸淡出歷史了。

pnpm:通過硬鏈接(hard links)的方式在硬盤上對某個版本的模塊只保存一份,可以在多個項目之間共用,從而節省了大量硬盤空間,順便也加快了模塊安裝速度。

模塊加載器

JavaScript 早期沒有語言層面的模塊化支持,導致大型項目的依賴管理非常不方便。變量名沖突、全局變量污染、模塊加載順序等問題比較突出。曾經出現過各種模塊化方案,比如 CommonJS Modules (CJS),Asynchronous Module Definition (AMD)和 Universal Module Definition (UMD)。從 2015 年開始,ES6 從語言層面支持了模塊化,即 ECMAScript Modules (ESM)。

除了上述常見的 JavaScript 模塊格式,還有像 System.register或全局模塊,以及一些非 JavaScript 模塊,比如 JSON modules,CSS modules,Web Assembly 等。

模塊加載器就是加載和處理上面各種類型模塊代碼的工具,有同步和異步、靜態和動態之分。通常,一個模塊放在一個單獨的文件里,通過一些指令來導入。當一個項目有幾十上百個模塊的時候,如何保證它們的加載執行先后順序就是個問題。不用擔心,模塊加載器會幫你處理好依賴關系。

RequireJS:實現了 AMD 模塊加載,主要用于瀏覽器端,也可以在 Node 里使用。

SystemJS:一個動態模塊加載器,可以加載所有類型的 JavaScript 模塊,甚至包括非 JavaScript 模塊,可用于瀏覽器和 Node。

StealJS:可以加載 ESM,ADM 和 CJS 格式的模塊。

ES Module Loader:瀏覽器實現的模塊加載器,Node.js 里加上 --experimental-modules標志也能使用。

以上模塊加載器是在運行時加載和執行代碼的。不要跟構建工具里的各種 loader 混淆,那些是在構建時進行預處理的工具,只是做一些格式轉換。

打包工具

一個實際的生產項目,通常不是把源碼直接發布到服務器上。而是通過一些工具對各種模塊和靜態資源進行整合處理,最終生成的代碼可能跟源碼完全不一樣了。這就是打包工具的作用。比較常見的打包工具有:

Webpack:可以說是最流行的打包器,幾乎是大部分項目的標配。它本身只能識別 JavaScript 和 JSON 文件,但是它的架構設計提供了無限的可能,通過各種 loader 可以處理任意類型的資源,通過插件可以優化打包結果和進行資源管理、注入環境變量等。它的構建目標也可以根據平臺定制,比如瀏覽器、Node.js、web worker, Electron 等。

Rollup:也是一個優秀的打包器,支持輸出 library 和 application。它最大的賣點就是默認支持 ES 模塊,很早就實現了 tree-shaking 功能。同時也具備插件和 hook 功能,可定制化也比較好。

Parcel:工具界的后起之秀,號稱“零配置*的打包器,如果你曾經被 Webpack 繁瑣的配置困擾過,那它可能會吸引你。

Browserify:應用范圍稍窄的打包器,專門用于轉換 Node.js 包以便能在瀏覽器運行。它跟 Node.js 使用相同的模塊系統,有些模塊只用于 Node 平臺,通過它的轉換就可以在瀏覽器端使用了。它只能處理純 JavaScript 模塊,通常跟 Gulp 配合使用。

Metro:React Native 專用的打包器,通過一個入口文件和各種配置,最后打成包含所有代碼和依賴的單個 JavaScript 文件。

任務管理工具(Task Runner)

Task Runner 的作用是自動化執行項目所需的各種重復性動作,比如:

CSS 預處理 (Less, Sass) CSS 自動添加新特性屬性前綴(Autoprefixer) 優化圖片 合并、壓縮 JavaScript 文件 監聽文件變化,自動執行任務

比較主流的任務管理器是 Grunt 和 Gulp,Webpack 也算一個。

Grunt:命令行工具,通過精細化的配置和豐富的插件可以完成很多復雜的任務。

Gulp:跟 Grunt 不同,Gulp 采用流式管道組合多個任務,任務之間的臨時結果是放在內存中的,執行效率會高很多。

Webpack:又是你,Webpack。任務管理只是 Webpack 強大功能的一部分,通過不同的插件在構建的不同階段執行個性化的任務。

如果你覺得上面幾個任務管理器有點殺雞用牛刀,你也可以根據實際情況選用 bash 腳本,npm 腳本或者 Makefile 等實現一些簡單的任務管理。

轉譯器

JavaScript 轉譯器的作用是將非 JavaScript 語言(TypeScript,CoffeeScript,LiveScript 等)或不同版本的 JavaScript(ES6,ES7,ES8 等)翻譯成符合目標平臺要求(兼容性、變量混淆、嚴格模式等)的等價代碼。

大部分轉譯器在處理源碼和代碼優化的過程中都使用抽象語法樹(AST)作為中間格式。AST 將源碼逐步拆分解析成帶有元數據的樹形結構:

Code --(parse)-->AST--(transform)-->AST--(generate)-->Code

Babel是目前主流的 JavaScript 轉譯器,它的工具鏈體系主要用于將 ES6 以上版本的 JavaScript 轉譯成向后兼容瀏覽器的代碼。Babel 可以轉換語法、提供目標平臺缺失的特性支持、轉換源碼等。

有了 Babel,我們可以盡早用上新的語言特性,而不用擔心目標瀏覽器是否支持。

構建工具

構建其實是個綜合概念,它包含了模塊打包、源碼轉譯、任務管理等多個步驟。其他語言和平臺有各種 Build 工具,比如 Make,Gradle,Ant,Maven,Rake 或 MSBuild 等。其中 Make 是最常見的通用構建工具,通常用于 C 語言,但其實也可以用于構建 JavaScript 項目。

對于 JavaScript 工具鏈來說,構建的目標可能是 npm 包、網站、Node 服務器、RN 應用、Electron 應用等等。有些任務可用專門的工具完成,但構建是個復雜的過程,通常需要綜合使用多個工具。

比如 Build 可以用 Buck,Bazel,Lerna 等工具同時管理多個模塊,實現增量 Build(只重新構建有改動的模塊,提高效率)。任務管理使用 Grunt 和 Gulp,模塊打包用 Webpack、Rollup、Parcel、Browserify 等。

調試工具

調試器在開發過程中必不可少,它可以在 Node.js 和瀏覽器中跟蹤查看運行中的代碼。通常會提供斷點、單步執行、監視變量、查看內存和 CPU 使用情況等功能。

Chrome DevTools:Chrome 瀏覽器自帶的開發者工具,是目前瀏覽器開發工具里最好用的(沒有之一)。它的功能之強大,用法之多可以寫本書了。

node-inspector:早期用于調試 Node.js 代碼的工具,現在基本不用了,因為 Node.js 已經內置了基于 DevTools 的調試器。

VS Code:又一調試神器,內置 Node.js 調試器,還能調試 TypeScript 和其他能轉譯成 JavaScript 的語言。

Node 進程管理器

Node 進程管理器用于管理運行中的 Node 應用程序。提供高可用、自動重啟、文件監控、性能和資源監控和集群等功能。

Forever:顧名思義,它的作用是保持 Node.js 程序永遠運行。它是一個簡單的命令行工具,對小型 Node.js 應用比較方便。

PM2:用于生產環境的 Node.js 進程管理工具,內置負載均衡、自動重啟和日志、監控和集群管理等功能。

StrongLoop Process Manager(Strong-PM):跟 PM2 差不多,也可用于生產環境的 Node.js 進程管理,有多主機部署功能。

另外,SystemD 是 Linux 系統里的默認進程管理器,可用它把 Node.js 應用作為服務運行。

項目腳手架

隨著項目復雜度的提升,創建新項目的步驟也變得越來越繁瑣,可能需要重復大量的配置工作。這個時候就需要項目腳手架了。很多框架都提供了腳手架工具,比如 Vue.js 有 Vue CLI,Angular 有 Angular CLI,React 有 create-react-app 等。也有通用的腳手架,Yeoman 就是最流行的一個。

快速創建新項目 創建模塊或 package 啟動新服務 統一代碼風格、最佳實踐等 項目推廣,讓用戶快速上手示例 app

以上就是淺談JavaScript工具鏈不完全指南的詳細內容,更多關于JS工具鏈不完全指南的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久精品一区二区三区四区| 日韩女优毛片在线| 亚洲色图欧洲色图| 一区二区三区在线看| 偷拍亚洲欧洲综合| 六月婷婷色综合| 成人午夜激情视频| 亚洲二区三区四区| 亚洲欧美日韩视频二区| 欧美日韩视频不卡| 国产亚洲综合色| 不卡一区二区中文字幕| 在线视频国内自拍亚洲视频| 久久亚洲一级片| 亚洲黄色小视频| 国产一区二三区好的| 波多野结衣亚洲一区| 亚洲精品中文字幕在线| 欧美亚洲国产bt| 久久色.com| 成人黄色在线网站| 26uuu亚洲综合色| jizz一区二区| 欧美一级高清大全免费观看| 亚洲国产一区在线观看| av在线不卡电影| 不卡的电影网站| 国产成人自拍网| 91精品国产91久久久久久最新毛片 | 精品日韩99亚洲| 韩国v欧美v日本v亚洲v| 在线免费观看日本一区| 久久66热偷产精品| 精品88久久久久88久久久| 国产精品地址| 久久精品99| 免费日韩av片| 欧美一站二站| 最新欧美精品一区二区三区| 99成人在线| 亚洲欧洲日本国产| 久久精品国产精品亚洲红杏| 舔着乳尖日韩一区| 午夜激情久久久| 亚洲美女少妇撒尿| 欧美日韩成人在线一区| 91在线观看视频| 中文字幕免费不卡| 在线观看视频一区二区欧美日韩| 亚洲成av人片在www色猫咪| 岛国精品在线播放| 成人免费视频app| 天堂资源在线中文精品| 欧美日韩一卡二卡三卡| 欧美巨大另类极品videosbest| 亚洲性图久久| 国产成人综合网站| www.亚洲在线| 欧美日韩国产免费观看| 久久精品国产精品亚洲精品| 国产精品亚洲专一区二区三区| 国产精品免费视频观看| 欧美久久久久久蜜桃| 欧美一区二区三区四区久久| 欧美精品一区二区三区视频| 国产精品午夜春色av| 中文字幕第一区二区| 亚洲最色的网站| 日韩美女在线视频 | 中文精品在线| av激情亚洲男人天堂| 欧美日韩亚洲一区在线观看| 91色|porny| 国产精品免费一区二区三区观看| 波多野结衣精品在线| 亚洲欧美在线网| 国产91精品入口| 老司机精品视频导航| 97久久久精品综合88久久| 久久99久久99| 欧美精品九九| 色综合激情五月| 久久本道综合色狠狠五月| 日韩三级电影网址| 亚洲一线二线三线视频| 亚洲精品久久久蜜桃| 国产黄色成人av| 国产在线精品一区二区中文| 日本韩国欧美三级| 色诱亚洲精品久久久久久| 久久综合九色综合97婷婷| 亚洲一区二区三区影院| eeuss鲁片一区二区三区在线看| 国产视频一区免费看| 久久伊人蜜桃av一区二区| 亚洲精品乱码久久久久| 97久久超碰国产精品| 久久久水蜜桃av免费网站| 国产精品久久国产愉拍| 欧美成人a∨高清免费观看| 婷婷综合另类小说色区| 亚洲国产日韩欧美| 亚洲精品一区二区精华| 亚洲成av人片在线观看无码| 午夜日韩福利| 精品成人在线观看| 久久成人免费日本黄色| 亚洲一区二区三区高清不卡| 91成人在线免费观看| 亚洲日韩欧美一区二区在线| 成人av电影免费在线播放| 日本精品一区二区三区高清| 国产欧美日韩中文久久| 亚洲三级在线免费| 99久久婷婷国产| 精品欧美久久久| 国产99久久久精品| 欧美色窝79yyyycom| 轻轻草成人在线| 国产98色在线|日韩| 91精品国产综合久久久久久| 国产精品情趣视频| 欧美日韩一区二区高清| 国产三级欧美三级| 91麻豆成人久久精品二区三区| 欧美一二三四区在线| 国产成人综合网站| 精品国产乱码久久久久久影片| 北岛玲一区二区三区四区| 精品国产91久久久久久久妲己| 国产成人av一区二区三区在线| 91精品免费观看| 麻豆成人免费电影| 国模吧视频一区| 一区二区三区不卡在线观看 | 国产精品美女久久久久久久久| 欧美日韩国产精品一卡| 亚洲欧美怡红院| 久久婷婷影院| 国产精品99久久久久久有的能看| 精品美女一区二区| 成人av在线一区二区| 国产精品高潮呻吟| 国产精品乡下勾搭老头1| 精品99久久久久久| 99re66热这里只有精品4| 男女男精品视频网| 久久久久久久久久电影| 国产精品18久久久久| 国产午夜精品久久| 99热这里只有成人精品国产| 蜜乳av一区二区| 久久精品一区二区| 亚洲欧美视频| 不卡大黄网站免费看| 亚洲一区在线视频| 7777精品伊人久久久大香线蕉超级流畅| av成人免费在线| 五月天视频一区| 欧美本精品男人aⅴ天堂| 亚洲一区二区三区欧美| 成人高清av在线| 丝袜美腿成人在线| 精品国产乱码久久久久久夜甘婷婷| 在线一区欧美| 97se亚洲国产综合自在线观| 亚洲一区二区三区在线看| 久久无码av三级| 91久久久免费一区二区| 欧美人与禽猛交乱配| 美女尤物国产一区| 国产香蕉久久精品综合网| 麻豆av一区二区三区| 欧美精品啪啪| 国产一区二区在线看| 亚洲在线观看免费| 国产亚洲欧美中文| 在线成人高清不卡| 免费不卡亚洲欧美| 欧美视频成人| av电影在线观看一区| 久草这里只有精品视频| 亚洲一区在线观看网站| 国产拍欧美日韩视频二区| 欧美美女一区二区| 在线日韩一区二区| 99精品国产在热久久下载| av中文字幕不卡| 国产一本一道久久香蕉| 麻豆精品国产传媒mv男同| 亚洲成a人片综合在线| 亚洲精品乱码久久久久久| 18成人在线观看| 日韩一区日韩二区| 中文字幕视频一区| ...中文天堂在线一区| 亚洲欧洲一区二区在线播放| 国产欧美一区二区在线观看| 欧美不卡在线视频| 欧美成人一区二区三区片免费|