Сгладить вендорные переходные зависимости первичной зависимости

Я конвертировал существующие проекты из использования вендоров с помощью 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 созревает.

Другие вопросы по тегам