Сгладить вендорные переходные зависимости первичной зависимости
Я конвертировал существующие проекты из использования вендоров с помощью Glide в поддержку модуля Go 1.11.x. Но я затрагиваю конкретный случай в одном проекте, используя модули, которые я не могу решить.
Внутренний проект 'foo' имеет свои зависимости, продаваемые через "go mod vendor":
projects/src/foo/
main.go
vendor/
...
Это прекрасно работает при внутреннем построении этого проекта, так как сторонний разработчик может клонировать проект в любом месте и построить его без доступа к внешнему прокси-серверу для загрузки зависимостей.
Сейчас я пытаюсь разрешить проекту '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-запросов.
Это вообще возможно? Флаг "-mod=vendor" был очень полезен при непосредственном построении проекта "foo". Но это, кажется, не применимо здесь, потому что проектная панель не хочет продаваться. Он хочет получить одну первичную зависимость и все. Казалось бы, поддержка модуля Go не заботится о выравнивании переходных зависимостей.
Предыдущая при использовании glide
как менеджер пакетов, он будет извлекать 'foo' из внутреннего репозитория git, а затем выравнивать все его зависимости в моем каталоге vendor.
Первоначально опубликовано в виде вопроса к golang-орешкам, без ответа.
1 ответ
В настоящее время он не работает таким образом, используется только каталог поставщиков верхнего уровня. Из модулей помогают:
Для сборки с использованием каталога поставщиков верхнего уровня основного модуля для удовлетворения зависимостей (отключение использования обычных сетевых источников и локальных кэшей) используйте 'go build -mod=vendor'. Обратите внимание, что используется только каталог поставщика верхнего уровня основного модуля; Каталоги поставщиков в других местах по-прежнему игнорируются.
Для этого конкретного случая использования я бы рекомендовал подождать, пока go modules
созревает.