JS 開發必備 工具與 CI CD 完整指南:從程式碼品質、套件管理到自動化部署,全面掌握前端工程化工具鏈

me
林彥成
2022-10-09 | 6 min.
文章目錄
  1. 1. 什麼是 JavaScript 開發工具鏈?
  2. 2. 1. JavaScript 語法檢查:Linter 確保品質
  3. 3. 2. 程式碼風格與格式化:一致性是關鍵
  4. 4. 3. 跨瀏覽器支援:Babel 與 TypeScript
  5. 5. 4. 前端工程化:打包工具
  6. 6. 5. 套件管理:npm 與 Yarn
  7. 7. 6. 版本管理:Git 與語意化版本
  8. 8. 7. 前端框架與函式庫:選型策略
  9. 9. 8. CI/CD 自動化部署:確保品質
  10. 10. FAQ:前端開發工具常見問題
    1. 10.1. Q1:ESLint 與 Prettier 有什麼具體區別?
    2. 10.2. Q2:為什麼有了 ES6 原生支援,我們還需要 Webpack 打包?
    3. 10.3. Q3:小型個人專案建議導入 CI/CD 嗎?

什麼是 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 程式碼後立即看到網頁更新,省去手動上傳的麻煩。這種「開發自動化」的習慣是專業工程師與業餘玩家的重要分水嶺。



喜歡這篇文章,請幫忙拍拍手喔 🤣