tannermidd/pi-pocket 的 npm 发布工作流已被修改。2026 年 10 月 30 日 22:22 UTC 合并的提交 db1e531 在合并 PR #229(分支 fix/publish-npm-11)的同时,将 npm 客户端固定为 11,并改为在包中没有 npm-shrinkwrap.json 时于发布前停止。修改所涉及的文件只有 .github/workflows/publish.yml 一个,改动量为新增 13 行、删除 1 行。
npm-shrinkwrap.json 是一个在安装时把依赖版本原样固定下来的文件。工作流中新加的注释写明 npm 12 会把这个文件从包里漏掉。如果照旧使用最新的 npm,就会在没有锁文件的情况下发布,测试过的依赖版本就无法传递给安装者。修改分为两条。首先把 npm 安装从 npm install -g npm@latest 改为 npm install -g npm@11,从而保留了注释所说的支持 trusted publishing 的那一区间。接着检查 npm pack --dry-run --json --ignore-scripts 的输出中是否包含 npm-shrinkwrap.json,如果没有,就留下一条说明“安装时验证过的依赖版本不会被传递”的消息,然后以退出代码 1 中止。这是一道防止在发布前悄悄发出错误发布的关卡。
不过确认的改动只在发布流水线的一处。没有改动应用代码或包内容的部分,检查也只看锁文件是否出现在列表中,因此并不检查其中的依赖版本是否与已验证的版本一致。工作流仍然会先把 package-lock.json 复制为 npm-shrinkwrap.json 再做检查,所以这项检查更接近于确认那份副本能否通过 npm pack。给定的记录中没有关于 npm 12 发布时间表的信息,也没有说明该提交是否已实际反映到发布中。在只有先修好新 npm 处理锁文件的方式才能继续发布的情况下,这更像是作为防止锁文件丢失的手段而加入的防御性改动。