esbuild · SWC · Monorepo · 遠端 Mac · 2026

2026 年遠端 Mac 前端建置避坑:
esbuild 與 SWC 在 Monorepo 中的平行 worker、快取目錄與 Node 堆參數對照表

2026.04.11 前端/建置系統 約 7 分鐘閱讀

適用對象:pnpm/npm workspaceTurbo/Nx 內同時使用 ViteNext.js 等會呼叫 esbuildSWC 的團隊。租用的 遠端 Mac 常見痛點是:兩套原生編譯器各自開滿執行緒、快取目錄不一致、Node 端 OOM。以下對照 GOMAXPROCS/worker 數cacheDirNODE_OPTIONS 堆上限增量建置開關,並附遠端 Runner 驗收步驟。內鏈:前端類技術見解列表官網首頁購買/租用(免登入);延伸可讀 Rspack × esbuild 快取與 worker 驗收

01 為何 Monorepo 在遠端 Mac 上容易失控

Apple Silicon 單核很快,但 esbuild(Go)SWC(Rust) 的預設平行度彼此不知道對方存在;再疊上 PostCSS、測試 worker 與型別檢查,CPU 會被「過度訂閱」,磁碟上的快取也容易被清機腳本掃到不同路徑而變冷。先對齊環境變數與快取根目錄,再量測冷/暖建置,否則 PR 上的耗時數字只是雜訊。

  1. 雙重平行:esbuild 受 GOMAXPROCS 影響;SWC 常見以 RAYON_NUM_THREADS 或框架內建池控管,兩者需與 Turbo --parallel 一起加總。
  2. 快取漂移:只備份 node_modules 卻漏掉 .turbo.swc.next/cache 時,Runner 每次都像冷啟。
  3. 堆記憶體:source map 與 TS 程式仍在 Node;未設 NODE_OPTIONS 時,OOM 會偽裝成「SWC 很慢」。

02 對照表:GOMAXPROCS/worker、cacheDir、堆、增量

下表當作 Runner 設定與工單貼上的「草稿欄位」;實際 CLI 名稱請以各框架文件為準。

層級 GOMAXPROCS/worker 數 cacheDir NODE_OPTIONS 堆上限 增量建置開關
esbuild(Go) 共用遠端機建議 GOMAXPROCS 取實體核心減 1;與外層任務併發相乘前先在試算表加總。 二進位不持久化模組圖;固定外層如 node_modules/.cache/esbuild 或倉庫根 .cache/build,並列入還原快取的 artifact 白名單。 esbuild 本體不吃 V8 堆;若外層為 Node 外掛包裝,可設 NODE_OPTIONS=--max-old-space-size=6144 起跳再依 RSS 調整。 無單一全域 CLI 開關;增量由 bundler(如 Vite)或 API 模式+上層快取承擔。
SWC(Rust) RAYON_NUM_THREADS 對齊可用 vCPU 並預留 1 給系統/sshd;Next/Turbopack 另遵守其內建執行緒池上限。 保留 .swc.next/cache 於本機 NVMe;必要時以符號連結掛回工作目錄,避免清機掃到預設暫存外路徑。 與 TS 語意檢查或外掛併跑時常設 --max-old-space-size=8192;若 swap 抖動,應先降併發再升堆。 依框架啟用磁碟 AST/轉譯快取與 incremental;暖機驗收時勿手動刪快取目錄,以免誤判命中。
Monorepo 編排(Turbo/Nx) turbo run --parallelGOMAXPROCSRAYON_NUM_THREADS 對表後再壓上限;總執行緒建議低於邏輯核心數並保留 I/O 餘裕。 統一 TURBO_CACHE_DIRNX_CACHE_DIRECTORY 單一路徑;與套件內快取分層但同一掛載點,便於備份與配額監控。 在 CI profile 或 ~/.zshrc 單點匯出 NODE_OPTIONS,避免巢狀腳本覆寫造成子程序堆不一致。 本地增量命中穩定後再啟遠端快取;命中率須能對照 lockfile 與設定檔雜湊,避免「命中假象」掩蓋壞設定。
可寫進工單的預設值(Apple Silicon Runner)
  • 大型設計系統可先試 Node 堆 8 GB 上限,再以 sample/RSS 收斂。
  • 總 worker 預留 至少 1 核 給桌面同步、防毒與磁碟 flush。
  • NVMe 上暖機增量相對冷啟常可省 約三成至六成 牆鐘時間(視圖譜與快取鍵而定)。

03 遠端 Mac 驗收步驟

  1. 環境一致性:兩個 SSH 工作階段執行 env | sort,確認 GOMAXPROCSRAYON_NUM_THREADSNODE_OPTIONS 與快取根目錄相同後再比較分支。
  2. 快取證據:暖機建置應看到 cacheDir 內檔案更新時間推進,且 Turbo/Nx 日誌出現命中;若永遠冷啟,先查是否每次 job 清空工作目錄。
  3. 資源競態:邊跑單元測試邊建置仍須落在團隊公布的牆鐘預算內;超出則縮併發或拆 job。
  4. 磁碟水位:df -h;快取目錄合計超過可用空間約兩成時應 prune 過期分支或改掛更大碟。
  5. 交接附註:於發布說明貼上對照表列+冷/暖各一次耗時與 RSS 峰值,方便下一任維運對齊。

若調參後仍長時間排隊或記憶體觸頂,可改租獨享 vCPU 與 NVMe的遠端 Mac,讓快取保持熱狀態並縮短 CI 等待。

04 FAQ

提高 GOMAXPROCS 一定更快嗎?

超過實體核心後多為上下文切換成本;請與 SWC 執行緒與 Turbo 併發一起畫上限。

esbuild 與 SWC 要共用同一個 cacheDir 嗎?

內部格式不同,應分目錄;但放在同一父掛載點(例如 /Volumes/buildcache)便於備份與配額管理。

共用遠端主機上開增量安全嗎?

路徑隔離且快取鍵含 toolchain 版本時可行;升級 Node 或編譯器大版本後應主動失效快取再重跑冷啟基準。

遠端 Mac · 建置吞吐

租用遠端 Mac,為 esbuild/SWC 管線提速

獨享 Apple Silicon 可降低排隊並維持快取熱度;前往購買/租用頁免登入下單,並參考定價幫助中心首頁方案說明。

Monorepo esbuild SWC
租 Mac 提速建置