Skip to content
⚠️ This article was written in 2021. Some content may be outdated.

團隊技術棧升級方法論

今年主導了三個大的技術棧升級:Vue 2 → Vue 3、Jest → Vitest、Lerna → pnpm workspace。每個都踩過坑,總結出一套方法論。技術升級不只是技術決策,更是一次團隊管理實踐。

升級的三個階段

階段一:評估(2-4 周)
- 收益分析:解決什麼問題?ROI 如何?
- 風險評估:兼容性、團隊學習成本、回滾方案
- 小範圍 POC:驗證可行性

階段二:執行(4-12 周)
- 制定分階段計劃
- 確定遷移邊界
- 並行運行新舊方案

階段三:收尾(2-4 周)
- 清理舊代碼
- 補充文檔
- 團隊知識分享

評估階段的關鍵問題

每次做升級決策,我都會問自己這 5 個問題:

markdown
## 升級評估清單

1. 痛點量化
   - 當前方案每月浪費多少開發時間?
   - 新方案預計能提升多少效率?
   - 能否用數字説明?(構建時間、bug 率、新人上手時間)

2. 成本估算
   - 遷移需要多少人天?
   - 學習曲線有多陡?
   - 是否需要外部培訓或諮詢?

3. 回滾方案
   - 如果遷移失敗,能不能回到原狀態?
   - 回滾成本是多少?

4. 團隊共識
   - 核心成員是否支持?
   - 是否有人能成為遷移的 champion?
   - 團隊的工作量是否允許同時做遷移?

5. 時機判斷
   - 目標技術是否足夠穩定?
   - 是否有其他更緊迫的事情?
   - 是否可以和業務需求結合推進?

執行階段的策略

Vue 3 遷移:漸進式

javascript
// 遷移路線圖
const migrationPlan = {
  week1_2: '搭建 Vue 3 + Vite 開發環境,寫遷移指南文檔',
  week3_4: '遷移公共組件(Button、Input、Modal)',
  week5_8: '逐個頁面遷移,新功能直接用 Vue 3 寫',
  week9_12: '處理邊緣用例,清理 Vue 2 兼容代碼',
  parallel: '舊分支保持可部署狀態,隨時回滾'
}

pnpm 遷移:一次性切換

bash
# pnpm 遷移不適合漸進式,要麼用要麼不用
# 我們的步驟:

# 1. 本地驗證
npx pnpm import  # 從 package-lock.json 生成 pnpm-lock.yaml
pnpm install     # 驗證安裝是否正常
pnpm test        # 驗證測試是否通過

# 2. CI 切換
# 修改 CI 配置從 npm 切換到 pnpm
# 保留舊的 CI 配置作為 fallback 一週

# 3. 全團隊統一
# 更新開發環境搭建文檔
# 在 .npmrc 中添加 shamefully-hoist 處理兼容問題

團隊知識傳遞

技術升級最怕的是隻有一個人懂。我們的做法:

typescript
// 知識傳遞計劃

interface KnowledgeTransfer {
  // 1. 文檔先行
  docs: {
    migrationGuide: '遷移指南,覆蓋常見場景和坑',
    decisionLog: '決策記錄,為什麼選這個方案',
    runbook: '操作手冊,出問題怎麼處理'
  }

  // 2. 結對編程
  pairing: {
    // 升級初期安排結對,讓多人蔘與
    schedule: '每週 2 次結對編程 session',
    rotation: '輪換結對對象,覆蓋整個團隊'
  }

  // 3. 技術分享
  sharing: {
    kickoff: '遷移前做一次 Kick-off 分享',
    midReview: '遷移中做階段回顧',
    retrospective: '遷移後做技術覆盤'
  }
}

處理阻力

技術升級一定會遇到阻力。常見的幾種情況:

"現在的方案挺好的,為什麼要換?"
→ 用數據説話:構建時間從 40s 降到 3s,HMR 從 2s 降到 50ms

"太忙了,沒時間遷移"
→ 和業務需求結合:新功能用新方案寫,舊代碼逐步遷移

"萬一新方案有 bug 怎麼辦?"
→ 回滾方案是必須的,漸進式遷移確保隨時可回滾

"我學不會新東西"
→ 安排培訓和結對,降低學習壓力

小結

  • 技術升級的評估要量化,用數字説服團隊和領導
  • 執行階段要有明確的回滾方案,降低風險
  • 知識傳遞比技術方案更重要,避免單點依賴
  • 阻力是正常的,關鍵是用數據和體驗來化解
  • 好的技術升級應該是"無痛"的——用户和大部分團隊成員感覺不到變化

MIT Licensed