登录
首页 >  Golang >  Go问答

供应链优化和优选对主要供应商的依赖项传递

来源:stackoverflow

时间:2024-03-10 17:18:25 452浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《供应链优化和优选对主要供应商的依赖项传递》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我一直在将现有项目从通过 glide 使用供应商依赖项转换为使用 go 1.11.x 模块支持。但我在一个项目中使用我无法解决的模块遇到了一种特殊情况。

内部项目“foo”的依赖项通过“go mod供应商”提供:

projects/src/foo/
    main.go
    vendor/
        ...

这在内部构建该项目时效果很好,因为非 go 开发人员可以将项目克隆到任何位置并构建它,而无需外部代理访问来下载依赖项。

现在我试图允许项目“bar”使用库“foo”构建工具。

package bar

import "internal.com/project/foo"

“go.mod”文件仅包含:

module internal.com/project/bar

require internal.com/project/foo v0.0.0-...

我将通过以下方式供应商:

go module vendor

我通过以下方式构建:

go build -mod=vendor

我看到的是“foo”将从内部 git 存储库克隆,并且其所有依赖项都将从其远程 git 源下载,并且我的“go.sum”文件将使用所有瞬态更新依赖关系。但我真正想要的是仅从我的内部网络获取“foo”并使其扁平化供应商的依赖项。理想情况下,不应有外部 http 请求。

这可能吗?直接构建项目“foo”时,“-mod=vendor”标志非常有用。但它似乎并不适用于此,因为项目“bar”不想供应商。它想要获得一个主要依赖项,就是它。看来 go 模块支持并不关心扁平化供应商的瞬态依赖关系。

以前,当使用 glide 作为包管理器时,它会从内部 git 存储库中获取“foo”,然后将其所有依赖项压平到我的供应商目录中。

最初作为问题发布给 golang-nuts,没有回复。


解决方案


它目前无法以这种方式工作,仅使用顶级供应商目录。来自modules help

使用主模块的顶级供应商目录来构建以满足 依赖关系(禁用通常的网络资源和本地资源) 缓存),使用“go build -mod=vendor”。请注意,只有主模块的 使用顶级供应商目录;其他供应商目录 位置仍然被忽略。

对于这个特定的用例,我建议等到 go 模块 成熟。

终于介绍完啦!小伙伴们,这篇关于《供应链优化和优选对主要供应商的依赖项传递》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>