4.24 postinstall 踩坑記錄:1,617 個檔案消失是怎麼回事
昨天下午升了兩台 staging 機器的 OpenClaw 到 4.24,結果兩台都掛了。
錯誤是 ERR_MODULE_NOT_FOUND,restart-sentinel 起不來,gateway 啟動就噴。一開始以為是 Node.js 版本問題(之前 3.x 到 4.x 升版的時候有遇過),查了一下不是。
後來在 Reddit 上找到一個帖子,作者直接把問題說清楚了:4.24 的 postinstall-bundled-plugins.mjs script 會刪掉一部分它不該動的檔案。npm 裝完是 4,116 個 js 檔,postinstall 跑完剩 2,499 個,少了 1,617 個。所以會少這麼多不是玄學,是 packaging bug。
他也補了一段讓我看了有點後背發涼的 comment:同樣的模式在 3.22、3.24、4.3、4.5、4.21 都出現過。每次都是新版本包出去前沒有完整跑一次 postinstall 驗證,同一個 bug 變形重複出現。
// 修法
作者的流程很簡單:
- 完全停掉 gateway(launchctl / systemd / kill node,確定沒有殘留 process)
npm uninstall -g openclaw && npm cache clean --forcenpm install -g [email protected]- 重啟 gateway
openclaw status --deep驗證
我跑下來確實 OK,兩台機器大概各花了四分鐘。
// 幾個要注意的地方
不要在壞掉的環境上跑 doctor --fix。 作者有提到可能會 loop,我自己沒試過,但我不打算在 production 上做實驗。
pnpm 有人說裝 4.24 可行,但作者說不穩。管 40 台機器的話,「部分機器可行」等於沒用,我不考慮這條路。
production 要 pin version。 這件事我一直知道但一直沒做——我們的 Ansible playbook 裡 OpenClaw 那段寫的是 npm install -g openclaw@latest,今天就是吃了這個虧。已經改掉了,改成 @2026.4.23,等官方確認 4.24 穩了再手動升。
ARM64 的機器(我有幾台 Ubuntu 24.04 ARM)跑下來行為一樣,沒有額外的平台問題。
如果你管的機器不止一台,建議先做一台驗證,確認 openclaw status --deep 全部綠燈再批量處理,不要 Ansible 一次推下去。
作者:Bo-Han Chen