Skip to main content
OpenClaw 源代码检出使用 pnpm-lock.yaml。已发布的 OpenClaw npm 包使用 npm-shrinkwrap.json(npm 的可发布依赖锁文件),因此包安装会使用发布期间已审查的依赖关系图。

重要性

Shrinkwrap 是随 npm 包发布的依赖树凭据:它会告知 npm 要安装哪些确切的传递依赖版本。 对于 OpenClaw 版本发布,这意味着:
  • 已发布的包不会要求 npm 在安装时临时生成全新的依赖关系图;
  • 依赖项变更可以接受审查,因为它们会体现在锁文件差异中;
  • 发布验证测试的是用户将要安装的同一依赖关系图;
  • 包大小或原生依赖项方面的意外问题会在发布前暴露。
Shrinkwrap 不是沙箱。它本身不能使依赖项变得安全,也不能取代主机隔离、openclaw security audit、包来源证明或安装冒烟测试。 OpenClaw 是 Gateway 网关、插件宿主、模型路由器和智能体运行时,因此默认安装会影响启动时间、磁盘占用、原生包下载和供应链暴露面。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