Как добавить локальную зависимость вендору при использовании go mod
До того как я использовал go dep
, но теперь офис обеспечит официальный инструмент go mod
,
Когда я использую go dep
Я могу добавить пакеты локальной зависимости к поставщику и ignored
в Gopkg.toml
игнорировать поиск пакета из репо. Я могу выполнить go dep update
обычно.
Сейчас пользуюсь go mod
Я также добавляю пакет локальной зависимости вендору и добавляю его exclude
в go.mod
, Но когда я выполню go mod tidy
удалить пакет, хотя мой проект существует import xxx
,
Что я сделал:
- создать новый проект
- выполнить go mod init
изменить go.mod
exclude privaterepo.com/bb/bb
скопируйте мой локальный модуль продавцу, потому что локальный модуль находится в частном репо, который не поддерживает https.
- Теперь поставщик просто так:
vendor |-github.com/aa/aa |-privaterepo.com/bb/bb
- импорт "privaterepo.com/bb/bb"
- выполнить go build -mod vendor
- чем я получил ошибку "не могу найти модуль для пути privaterepo.com/bb/bb" 9 всегда пытайтесь заменить, но это также не работает
Итак, что я должен сделать, чтобы добавить локальный пакет к поставщику и избежать go mod
убери это?
1 ответ
Итак, что я должен сделать, чтобы добавить локальный пакет к поставщику и избежать его удаления?
Ну, я думаю, ты не можешь этого сделать. Это не так, как это работает. go mod vendor
управляет папкой вашего поставщика.
Вместо exclude
В пакете go.mod вы должны добавить replace
директива для инструктирования инструмента go искать пакет не с privaterepo.com, а с локальной файловой системы. Цитирование из https://github.com/golang/go/wiki/Modules
replace также может использоваться для информирования go-tooling об относительном или абсолютном расположении модулей на диске в многомодульном проекте, например:
replace example.com/project/foo => ../foo
Так что в вашем случае: не пытайтесь вручную поместить privaterepo.com/bb/bb в вендор, но сделайте это где-нибудь за пределами текущего проекта и используйте
replace privaterepo.com/bb/bb => ../bb
И разреши go mod
скопируйте этот материал из файловой системы вашему поставщику.