什麼是 JavaScript 開發工具鏈?
JavaScript 開發工具鏈 (JS Toolchain) 是一套旨在提升開發效率、確保程式碼品質並實現自動化交付的軟體生態系統。其核心包含:1. 語法與風格檢查 (Linter & Prettier);2. 編譯與轉譯 (Babel & TypeScript) 以確保跨瀏覽器支援;3. 套件管理 (npm & Yarn) 以重用開源社群資源;4. 版本控制 (Git) 以追蹤程式碼演進;以及 5. CI/CD 自動化 以實現持續整合與部署。掌握這些工具不僅是為了跟上技術潮流,更是為了建立「工程化」的開發思維,讓開發者能從繁瑣的環境配置中解脫,專注於創造核心業務價值。
經過了一陣子的學習,小編認為有 8 個寫 JavaScript 開發 前可以思考的問題。這就好像談戀愛前,我們必須:
- 理解自己是什麼特質的人。
- 懂得發揮自己的特長和優勢。
- 盡可能探索與了解自己所愛的事物。
才不會明明是沉穩、內斂的人卻硬要變得開放、外向、愛講笑話、學炒熱氣氛,反而應該是要找到適合使用的 前端工具 和發揮特長和優勢的場合。
1. JavaScript 語法檢查:Linter 確保品質
Class 開頭到底要大寫還小寫?
同個團隊有幾個人就很可能有幾種不同的風格。Linter 會協助檢查品質,找到錯誤並提示。VS Code 提供了整合外掛:
- webhint, ESLint, StyleLint, Sass Lint, markdownlint。
日新月異的語法超多就跟撩妹金句一樣,真的有辦法記起來嗎? 善用 VS Code 的 Extension Pack 能提供語法提示或模板協助開發。
2. 程式碼風格與格式化:一致性是關鍵
程式碼風格重要的是一致,那該怎麼做到一致?
Prettier 是流行的格式化工具,建議搭配 Airbnb JavaScript Style Guide。小編之前的主管曾說:「寫出來的程式碼要像同一個人寫的」,這包含了架構、風格、排版的統一。
3. 跨瀏覽器支援:Babel 與 TypeScript
新潮語法那麼多,瀏覽器真的能夠支援嗎?
請參考 Can I Use 網站。新語法在跨瀏覽器的支援度就像徵友信,需要客製化。這時需要「翻譯蒟蒻」:
- Babel: JavaScript 編譯器,將 ES6 轉為瀏覽器理解的 ES5。
- TypeScript: JavaScript 的超集合,提供強型別並編譯為 JS。
- PostCSS: 讓 CSS 使用最先進功能,並安裝 polyfill 模擬效果。
4. 前端工程化:打包工具
專案部署前到底是在 Build 什麼?
模組是情場小白的「教戰守則」,打包工具則是將守則自然融入自身。大型專案必備建置工具,協助:
- Tree-shaking: 移除未使用的程式碼。
- Minify: 程式碼最小化以提升效能。
- Dead Code elimination: 移除不會使用的程式碼。
- Code Splitting: 程式碼拆分。
目前主流有 Parcel, Rollup, Webpack。
5. 套件管理:npm 與 Yarn
什麼是套件管理? 怎麼保持套件版本?
套件管理 讓別人研究過的東西我們不需重研。就像穿搭小物可看日雜學習,套件讓我們快速達到水平。常用的有 npm (Node.js 預設) 與 Yarn (Facebook 推出),透過指令更方便安裝與升級。
6. 版本管理:Git 與語意化版本
還在用開資料夾加上日期的方法管理檔案嗎?
在時間管理大師的世界裡,記住曾經和每個對象的回憶跟說過的話是很重要的,隨著對象越多就越有可能在某天踢到鐵板?!
如果對象與對象之間的相似性和重疊性越高,就可能面臨不敢改變的風險,譬如工作譬如興趣譬如作息譬如說過的情話,隨著時光飛逝,該怎麼好好記錄和應對?!
在專案中套件與套件間也可能產生相依性,那當版本需要升級時該怎麼評估和測試可能的影響?
雖然人生沒有辦法版本控制也沒辦法回到從前,但寫程式可以,到了專案不同的階段,也許也會想要再次回頭嘗試看看過去的解決方案。
語意化版本與版本控制系統 (VCS) 這時候就扮演相當重要的角色,才不會發生有人說出 "我覺得上上禮拜 Demo 的第二個版本比較好" 這種需要工程師通靈的工作模式。
- 語意化版本 (Semantic Versioning): 目標是讓用戶可以透過版本號看出相關資訊
- 版本控制系統 (VCS): Git 是主流的工具,常用的服務如 GitHub、GitLab 或 BitBucket
7. 前端框架與函式庫:選型策略
用新的概念與方式去實作跟組織程式碼可以嗎?
前端的框架跟函式庫百百種,究竟該怎麼選?
其實這跟伴侶的選擇有點像,要選當下適合我們的而非一昧的追求最好,當需求與供給沒辦法對應時,勉強別人接受並不公平,勉強自己適應也很痛苦。
函式庫和框架的選擇也是,實際上遇到的問題絕對都有一種以上的解決方案,而哪種方式才是最適合的就該好好想想。
在簡單的專案使用框架只會增加複雜度,在複雜專案的使用卻讓專案變得單純,所以該不該使用框架,端看各位大大遇到問題的維度和情境。
React、Angular、Vue 的出現就是新的概念去進行開發,進而達到提升執行效能又能降低維護難度的開發架構,主流框架大致都有以下特性
- 元件驅動開發
- 資料流跟畫面分離
- 狀態管理機制
- 網站的效能提升
隨著撰寫樣式檔開始越來越複雜,也因為 CSS 語法受限而發展出 CSS Pre-/Post-processors (預處理和後處理) 來拓展和優化寫法,Sass/SCSS 讓 CSS 可以使用嵌套規則、mixin、函數等等在原生 CSS 中無法使用的功能。
預處理器可以想像成女孩子的底妝組、眼妝組等等,將相同類型的化妝品進行分類和優化增加組合搭配的方便性,後處理器則可以想像成是女孩子隨時能補的 BB 霜。
PostCSS 通常會和 Webpack、Grunt、Parcel、Gulp 等打包工具一起使用,著重在防呆和支援性。
8. CI/CD 自動化部署:確保品質
CI/CD 在做什麼? 該怎麼透過流程減少人為失誤?
偷吃完都有記得擦嘴嗎?! 背地裡在檯面下做了一些事情又不想被發現或影響另一半怎麼辦?! 有沒有辦法自動化的把相關痕跡去除或隱藏?!
當然正常情況下是要盡量避免做一些見不得光的事情,但總是會有些人會如此,而 CI/CD 的目的就是為了確保程式碼在提交之後,減少因為少部分檯面下的更動影響程式運行的流程,確保程式碼的品質。
CI (Continuous Integration)、CD (Continuous Delivery/Deployment) 目的是從測試、建置到部署自動化,取代原來人工需要做的事情。
- CI (Continuous Integration): 專注在持續整合,目的是讓經過測試的程式碼用最快的時間回到主幹中,透過程式碼的自動化測試和建置,將穩定品質的程式碼合併,越早頻繁整合,整合難度的就越低且能確保最新版本是可運行的,常見的流程會是當嘗試將更改推送到 Git Repo 時,Linter 和測試就會運行
- CD (Continuous Delivery/Deployment): 專注在持續部屬和交付,更快速且頻繁的去更新我們的服務,依照需要的環境進行建置和部屬
CI/CD 通常採用工具自動化,常見的工具有 Github Actions、Jenkins、Circle CI 等等,過程中對程式碼運行測試,以確保在運作是正確的。
- Linter: ESLint
- 單元測試: Jest、Mocha、Jasmine
- E2E 自動化測試: Cypress、puppeteer、playwright
常見的流程會是
- 依照條件觸發執行對應任務
- 排程工作 (Cron Job): 定時執行一些測試任務
舉個排程的例子,前公司因為是處理看盤軟體,所以每天早上開盤前、開盤後都會排程進行一次完整的測試,確保開盤後系統的運作能夠正常、客戶能夠正常操作。
FAQ:前端開發工具常見問題
Q1:ESLint 與 Prettier 有什麼具體區別?
A:ESLint 側重於「程式碼邏輯與品質」(例如:禁止使用未定義的變數);而 Prettier 側重於「格式美化」(例如:每行限制長度、縮排空格數)。兩者通常搭配使用,ESLint 負責抓錯,Prettier 負責讓程式碼變漂亮。
Q2:為什麼有了 ES6 原生支援,我們還需要 Webpack 打包?
A:雖然現代瀏覽器支援 ES6,但 Webpack 的價值不僅是模組化,還包含:1. 壓縮混淆程式碼減少體積;2. 處理圖片、CSS 等非 JS 資源;3. 進行 Code Splitting 提升載入速度。它是「生產環境」必備的最佳化過程。
Q3:小型個人專案建議導入 CI/CD 嗎?
A:非常建議。 透過 GitHub Actions 設置簡單的自動部署,能讓您在 Push 程式碼後立即看到網頁更新,省去手動上傳的麻煩。這種「開發自動化」的習慣是專業工程師與業餘玩家的重要分水嶺。
喜歡這篇文章,請幫忙拍拍手喔 🤣
