pnpm-lock.yaml。已发布的 OpenClaw npm
包使用 npm-shrinkwrap.json,这是 npm 可发布的依赖锁文件,因此
包安装会使用在发布期间审查过的依赖图。
简单版本
Shrinkwrap 是随 npm 包一起发布的依赖树收据。 它告诉 npm 应该安装哪些确切的传递依赖包版本。 对于 OpenClaw 发布,这意味着:- 已发布的包不会让 npm 在安装时临时生成新的依赖图;
- 由于变更会出现在锁文件中,依赖修改更容易审查;
- 发布验证可以测试用户实际会安装的相同依赖图;
- 在发布前更容易发现包体积或原生依赖带来的意外。
openclaw security audit、包来源证明或安装烟雾测试。
简短的心智模型:
| 文件 | 适用位置 | 含义 |
|---|---|---|
pnpm-lock.yaml | OpenClaw 源码检出 | 维护者依赖图 |
npm-shrinkwrap.json | 已发布的 npm 包 | 用户的 npm install 依赖图 |
package-lock.json | 本地 npm 应用 | 不是 OpenClaw 的发布契约 |
为什么 OpenClaw 使用它
OpenClaw 是网关、插件宿主、模型路由器和代理运行时。默认安装会影响启动时间、磁盘占用、原生包下载以及供应链暴露面。 Shrinkwrap 为发布审查提供了稳定边界:- 审查者可以看到传递依赖的变动;
- 包验证器可以拒绝意外的锁文件漂移;
- 包验收可以使用将要发布的依赖图来测试安装;
- 插件包可以携带自己的锁定依赖图,而不是依赖根包来管理仅插件使用的依赖。
技术细节
根openclaw npm 包和 OpenClaw 拥有的 npm 插件包在发布时会包含 npm-shrinkwrap.json。合适的 OpenClaw 拥有的插件包也可以使用显式的 bundledDependencies 发布,这样它们的运行时依赖文件会随插件 tarball 一起携带,而不是只依赖安装时解析。
按如下方式维护边界:
pnpm-lock.yaml 中的生成包版本。这样可以保持 pnpm 依赖年龄、覆盖和补丁审查边界不变。
只有在有意刷新根包而不触及插件包时,才使用仅根包命令:
pnpm-lock.yamlnpm-shrinkwrap.json- 捆绑的插件依赖载荷
- 任何
package-lock.jsondiff
package-lock.json。
检查已发布的根包: