cover

概念圖

工程化的定義

當網站架構越來越複雜後,就需要一些工作方法或研究方法,讓大家工作時有所依循。

這就像是:假設你想學一些東西,自己自學跟去研究所學,學習的速度、深度、廣度一定不是同一個量級。

為什麼需要工程化?

換個角度思考:

  • 網路出現的時間不過是近 20 年的事
  • 現代網頁開發結構也都是近 10 年的東西

所以一直有人在提出:如何整理這些複雜、常用、常見的資料分類,並且讓它可以永續使用。

沒有工程化 vs 有工程化:一個真實場景

你有沒有想過,為什麼有些專案接手的時候讓人想翻桌?

想像一下這個場景 — 你加入一個新公司,打開前人留下來的專案:

沒有工程化的專案:

  • 沒有 README,不知道怎麼啟動
  • CSS 全部寫在一個 style.css 裡面,3000 行
  • JavaScript 直接寫在 HTML 的 <script>
  • 不知道哪些檔案還有在用、哪些是廢棄的
  • 問同事「這個怎麼部署?」答案是「你 SSH 進去然後手動拉 code」

有工程化的專案:

  • README.md 清楚寫了啟動步驟
  • 有統一的資料夾結構(components、pages、utils)
  • 有 ESLint + Prettier 確保程式碼風格一致
  • 有 CI/CD pipeline,push 到 main 就自動部署
  • 有 code review 流程,每個 PR 都有人看過

對吧?差別非常明顯。工程化不是什麼高深的理論,它就是讓你的團隊不會每天在那邊互相問「這個東西怎麼跑?」

工程化的核心思想

從亂七八糟到理論化、架構化的過程,就叫做工程化

工程化最重要的思考點:

  • 考慮多人共同協作的情境
  • 考慮後續維護的情境

基於這些情境所設計出來的架構或方法,都可以視為工程化後的結果。

常見的工程化實踐

我自己的想法是,工程化可以拆成幾個面向來看:

面向做法解決什麼問題
版本控制Git + GitHub/GitLab多人協作不會互相蓋掉 code
程式碼品質ESLint、Prettier、TypeScript風格統一,減少低級錯誤
Code ReviewPR review 流程知識共享,降低 bug 進入 production 的機率
CI/CDGitHub Actions、Jenkins自動化測試、自動化部署
文件化README、API docs、Storybook新人不用每件事都問人
測試Unit test、E2E test改 A 功能不會爆 B 功能

前端工程化的演進

如果你是前端開發者,回頭看歷史會很有感覺:

jQuery 時代(2006~2015 左右): 大家把所有邏輯塞在一個 app.js 裡面,CSS 就一個大檔案,部署就 FTP 上傳。那時候也沒什麼工程化可言,因為網頁本身就沒那麼複雜。

現代框架時代(2015~ 至今): React、Vue、Angular 出來之後,前端變得跟後端一樣複雜了。你要處理 框架 選型、狀態管理、路由、打包工具、TypeScript⋯⋯這時候如果沒有工程化,根本無法維護。

所以你會發現,工程化不是有人突然發明的,而是複雜度逼著大家不得不這樣做。

簡單來說

把所有事情有條理地整理出來,並且描述一個大家都可以 follow 的指引,其實都可以視為工程化。

工程化的終極目標,就是讓團隊可以把時間花在「解決真正的問題」上,而不是花在「搞懂怎麼跑專案」或「修別人造成的低級 bug」上。