仓库里开了 vendor 模式,本地构建报 `cannot find module providing package github.com/x/y: import lookup disabled by -mod=vendor`,模块文件和校验文件里都有记录,删掉缓存重试也没用,换台机器编译照样报。日志里能对上时间点,这种反而好排。

vendor 目录是依赖的一份快照,go.mod 新增依赖后没有重新生成,构建时按 -mod=vendor 只读本地目录,找不到就直接失败,不会去网上补,本地缓存里有没有都不影响。这一点先确认清楚,后面就不用反复试。

go env GOFLAGS
go build -mod=vendor ./...
go mod vendor
git status vendor | head

围绕「vendor 目录不同步」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。

处理上按这个顺序:先确认构建命令确实走的是本地依赖目录模式;重新生成一份依赖目录,把缺的那个包补进去;把依赖目录的变更和这次的代码一起提交到仓库。

结果对不对很好判断,本地和持续集成都能在本地依赖模式下编译通过,目录里能看到新增包。

作者 9823189