Before I used go dep
, but now office ensure the official tool is go mod
.
When I use go dep
, I can add local dependency packages to vendor and ignored
in Gopkg.toml
to ignore search the package from repo. I can execute go dep update
normally.
Now I use go mod
, I also add local dependence package to vendor and add it exclude
in go.mod
. But when i execute go mod tidy
, it remove the package even though my project exist import xxx
.
What did i do:
modify go.mod exclude privaterepo.com/bb/bb
copy my local module to vendor because the local module is on a private repo which not support https.
vendor |-github.com/aa/aa |-privaterepo.com/bb/bb
So, what should I do to add local package to vendor and avoid go mod
remove it?
The go mod vendor command constructs a directory named vendor in the main module's root directory that contains copies of all packages needed to support builds and tests of packages in the main module. Packages that are only imported by tests of packages outside the main module are not included.
For installing the go project dependencies, we use go get command, which automatically updates the go. mod file. You can also install go project dependencies by following a few steps, but remember as the package is still not used anywhere in the project it will be marked as indirect.
A Module is a collection of Go packages stored in a file tree under $GOPATH/pkg folder with a go. mod file at its root. This file defines the module's path, which is also the import path used for your project, and its dependency requirements, which are the other modules needed for a successful build.
So, what should I do to add local package to vendor and avoid go mod remove it?
Well, I think you cannot do this. This is not how it works. go mod vendor
manages your vendor folder.
Instead of exclude
ing you package from go.mod you should add a replace
directive to instruct the go tool to look up the package not from privaterepo.com but from the local filesystem. Quoting from https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive
replace also can be used to inform the go tooling of the relative or absolute on-disk location of modules in a multi-module project, such as:
replace example.com/project/foo => ../foo
So in your case: Do not try to manually put privaterepo.com/bb/bb in vendor, but have it somewhere outside the current project and use
replace privaterepo.com/bb/bb => ../bb
And let go mod
copy this stuff from the filesystem to your vendor.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With