我们有一个如this SO thread中所述的设置:
客户端项目依赖于同一存储库中存储为 .tgz 文件的本地包。编辑后的包名称为
@company/my-library
,存储库中的包文件路径为 local-packages/company-my-library-2.0.0.tgz
,客户端项目位于 client/
并依赖于它作为 "@company/my-library": "file:../local-packages/company-my-library-2.0.0.tgz"
当
npm install
在 BitBucket 管道中运行时,它会失败并显示以下消息。前两条消息实际上出现了两次。为了便于阅读,对 sha512 代码进行了编辑:
npm 警告 @company/my-library@file:/opt/atlassian/pipelines/agent/build/local-packages/company-my-library-2.0.0.tgz 的 tarball tarball 数据 (sha512-[相同- Package-Lock])似乎已损坏。再试一次。
npm warn tar TAR_BAD_ARCHIVE:无法识别的存档格式
npm 错误代码 EINTEGRITY
使用 sha512 时,npm 错误 sha512-[Same-As-Package-Lock] 完整性校验和失败:想要 sha512-[Same-As-Package-Lock] 但得到 sha512-[Another-Checksum]。 (131 字节)
我们尝试过的事情:
在开发计算机上,在 Windows 和 WSL Ubuntu 上卸载并重新安装本地软件包,同样在强制执行
npm cache clean --force
命令后:package-lock 中计算的校验和保持不变。
在BitBucket管道中,打印node.js和npm版本:它们实际上与开发机器相同:
环境 | node.js | npm |
---|---|---|
开发机 | v18.20.3 | 10.7.0 |
管道 | v18.20.4 | 10.7.0 |
由于某种原因,npm 在 pipeline 中计算的校验和与在开发环境中计算的校验和不同。有一条可疑的初始消息:“压缩包数据......似乎已损坏”,就好像文件未正确读取一样。但它位于同一个存储库中,因此不应该出现文件未正确下载的情况。
我们在 S.O. 上查看过。和 BitBucket 社区有关本地包、TAR_BAD_ARCHIVE、错误校验和的问题,即使在 GitHub Actions 中也是如此,但没有运气。
为什么会出现这种情况? TA
我想我们至少找到了根本原因(像往常一样,在S.O.中写下问题后,新的事情就会浮现在你的脑海中)。
在 BitBucket 管道脚本中,我们列出了本地包目录的内容 (
ls -l /opt/atlassian/pipelines/agent/build/local-packages/
):显示的文件大小为 131 字节,而在开发计算机上,.tgz 文件超过 500kb。
然后在管道中我们打印了包文件内容并... tadaaa:
version https://git-lfs.github.com/spec/v1
oid sha256:5cdaa2fbc2839fb5a46b7108d01b74185e1fa9623d452356d4de761a0903e03e
size 547575
这是一个 git LFS 参考文件。我们的存储库(本地和 bitbucket 上)启用了 LFS,并且这些二进制包存储为 LFS。
由于某种原因,BitBucket 管道尚未启用 Git LFS。现在开始下一个任务...