An npm-like tool for easily managing Go (golang) dependencies.
go get is very good. But managing multiple packages, locking versions down for reproducible builds, and
changing GOPATH or rewriting package imports is an exercise left to the developer. bunch tackles this
issue by providing a comprehensive tool for managing Go dependencies similar to npm for Node, supporting
installing, uninstalling, pruning, listing outdated packages, and much more.
go get github.com/dkulchenko/bunch
Alternatively, precompiled binaries for supported operating systems are available.
You can pin bunch itself, if you'd like to lock the version of bunch down. If bunch finds a version of itself in the vendored environment (that is, .vendor/bin/bunch exists), it will use that version instead.
See this repo's Bunchfile as an example.
github.com/this/repo !self # comments are fun! github.com/another/package github.com/another/package2 v2 # can be a branch, tag, or commit github.com/another/package3 a2b5va78d github.com/another/package4 >= 1.0 github.com/another/package5 ~> 1.4.x github.com/another/package6 > 1.0, < 1.4
(optional) Generate a Bunchfile based on your existing imports to get you started:
Install all packages listed in Bunchfile to .vendor directory:
Install a specific package and save it to the Bunchfile:
bunch install github.com/abc/xyz bunch install github.com/abc/xyz --save bunch install github.com/abc/xyz@v2 --save bunch install github.com/abc/xyz github.com/abc/xyz2
Update all packages to latest versions matching Bunchfile:
Remove a package and save the change to the Bunchfile:
bunch uninstall github.com/abc/xyz bunch uninstall github.com/abc/xyz --save
Prune unused packages from vendor directory (similar to npm prune):
List outdated packages:
Lock down the commits currently in use (creates Bunchfile.lock; similar to npm shrinkwrap):
Rebuild (recompile) all packages:
Using the vendored environment
Run commands/builds within the vendored environment (sets $GOPATH and $PATH):
bunch go build . bunch go fmt bunch exec make bunch shell
You can also add this to your .bash_profile to make the
go command automagically be bunch-aware (e.g. go build will automatically have the correct $GOPATH set if a Bunchfile is present):
if which bunch > /dev/null; then eval "$(bunch shim -)"; fi
For basic operations like installing/uninstalling/updating/pruning packages, all VCSes supported by
go get are supported by bunch (git, hg, svn, and bzr).
For more advanced operations, packages using Git are fully supported. Mercurial has mostly full support (does not support version ranges in the Bunchfile). Bazaar has some support (does not support version ranges, "bunch outdated", or "bunch install" caching up-to-date packages). Subversion has rudimentary support (only install/update/uninstall/prune).
Patches welcome :)
- Fork repository
- Create a feature or bugfix branch
- Open a new pull request
The MIT License (MIT)
Copyright (c) 2015 Daniil Kulchenko email@example.com