Skip to main content
OpenClaw 原始碼簽出使用 pnpm-lock.yaml。已發布的 OpenClaw npm 套件使用 npm-shrinkwrap.json,也就是 npm 可發布的相依性鎖定檔,因此套件安裝會使用發布期間已審查的相依性圖。

為何重要

Shrinkwrap 是隨 npm 套件發布之相依性樹的明細:它會告訴 npm 應安裝哪些確切的遞移相依性版本。 對 OpenClaw 發布而言,這表示:
  • 已發布的套件不會要求 npm 在安裝時臨時產生新的相依性圖;
  • 相依性變更可供審查,因為它們會呈現在鎖定檔差異中;
  • 發布驗證所測試的相依性圖,與使用者將安裝的相同;
  • 套件大小或原生相依性的意外情況會在發布前浮現。
Shrinkwrap 並非沙箱。它本身不會讓相依性變得安全,也無法取代主機隔離、openclaw security audit、套件來源證明或安裝煙霧測試。 OpenClaw 是閘道、外掛主機、模型路由器與代理程式執行階段,因此預設安裝會影響啟動時間、磁碟使用量、原生套件下載及供應鏈暴露風險。Shrinkwrap 為發布審查提供穩定的邊界:審查者可查看遞移相依性的變動,驗證工具會拒絕非預期的鎖定檔漂移,而外掛套件會攜帶各自鎖定的相依性圖,不必依賴根套件。

產生與檢查

openclaw npm 套件、OpenClaw 擁有的 npm 外掛套件(例如 @openclaw/discord),以及 @openclaw/ai 等可發布的工作區套件,會在發布時包含 npm-shrinkwrap.json。工作區相依性不會納入根 shrinkwrap,因為它們會與根套件一同發布;每個可發布的工作區套件則會分別鎖定自己的遞移相依性樹。適合的外掛套件也可使用明確的 bundledDependencies 進行發布,將其執行階段相依性檔案納入外掛 tarball,而非僅依賴安裝時解析。
產生器會解析 npm 的可發布鎖定格式,但會拒絕產生任何尚未存在於 pnpm-lock.yaml 中的套件版本。這能維持 pnpm 相依性版本新舊程度、覆寫與修補程式的審查邊界。 請將以下項目視為安全性敏感項目進行審查:
  • pnpm-lock.yaml
  • npm-shrinkwrap.json
  • 隨附外掛的相依性內容
  • 任何 package-lock.json 差異
OpenClaw 套件驗證工具要求新的根套件 tarball 包含 shrinkwrap,並拒絕已發布套件中的 package-lock.json。外掛的 npm 發布流程會檢查外掛本身的 shrinkwrap、安裝套件本身隨附的相依性,然後進行封裝或發布。

檢查已發布的套件

根套件:
外掛套件:
背景資訊:npm-shrinkwrap.json