Как добавить локальную зависимость вендору при использовании go mod - PullRequest
0 голосов
/ 03 декабря 2018

До того, как я использовал go dep, но теперь офис гарантирует, что официальным инструментом будет go mod.

Когда я использую go dep, я могу добавить локальные пакеты зависимостей вендору и ignored в Gopkg.toml, чтобы игнорировать поиск пакета из репозитория.Я могу нормально выполнить go dep update.

Теперь я использую go mod, я также добавляю пакет локальной зависимости вендору и добавляю его exclude в go.mod.Но когда я выполняю go mod tidy, он удаляет пакет, хотя мой проект существует import xxx.

Что я делал:

  1. создание нового проекта
  2. выполнить go mod init
  3. изменить go.mod exclude privaterepo.com/bb/bb

  4. скопировать мой локальный модуль поставщику, так как локальный модуль включенчастное репо, которое не поддерживает https.

  5. , теперь поставщик просто так:

    vendor |-github.com/aa/aa |-privaterepo.com/bb/bb

  6. import "privaterepo.com/bb / bb "
  7. выполнить go build -mod vendor
  8. , чем я получил ошибку " не могу найти модуль для пути privaterepo.com/bb/bb" 9 всегда пробуйте сзаменить, но он также не работает

Итак, что я должен сделать, чтобы добавить локальный пакет поставщику и избежать go mod его удаления?

1 Ответ

0 голосов
/ 04 декабря 2018

Итак, что я должен сделать, чтобы добавить локальный пакет к поставщику и избежать его удаления из мода?

Ну, я думаю, вы не можете этого сделать.Это не так, как это работает.go mod vendor управляет папкой вашего поставщика.

Вместо exclude загрузки пакета из go.mod вы должны добавить директиву replace, чтобы инструктировать инструмент go для поиска пакетане из privaterepo.com, а из локальной файловой системы.Цитирование из https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive

replace также может использоваться для информирования инструмента go об относительном или абсолютном расположении модулей на диске в многомодульном проекте, например:

   replace example.com/project/foo => ../foo

Итак, в вашем случае: не пытайтесь вручную поместить privaterepo.com/bb/bb в вендор, но держите его где-нибудь за пределами текущего проекта и используйте

replace privaterepo.com/bb/bb => ../bb

И позвольте go mod скопируйте этот материал из файловой системы вашему поставщику.

...