Glide

Golang 包管理的第三方增强

Posted on August 31, 2016
  • 安装: curl https://glide.sh/get | sh

    mac可以: brew install glide

  • glide init / glide create

    生成glide.yaml, 还有从其他包管理导入的功能

    会扫描你的代码库, 找出import外部包, 汇总到glide.yaml

    如果项目中引用了一个外部包的子包, 在glide.yaml中该包的subpackages下会列出子包(这个有什么用呢?)

  • glide up / glide update

    • 从glide.yaml获取依赖, 获取第三方包, 存入vendor

    • 生成glide.lock: This file contains the entire dependency tree pinned to specific commit ids. This file, as we’ll see in a moment, can be used to recreate the exact dependency tree and versions used

      会对比一下vendor中的版本是否是声明的, 如果不一致会获取/设置正确的版本

    存入 vendor的包都是带git的, 因此有准确的提交号

  • glide install

    • 如果glide.lock 不存在, 则执行glide up

    • 如果glide.lock存在, 如果vendor有缺失的包, 会依照glide.lock来获取正确的包到vendor

      如果 glide.yaml中没有写清版本号, 将去获取一下最新的版本号, 和glide.lock对比一下, 如果不一致, 会更新, 但如果glide.yaml中有版本号, 那么不会检查

    个人理解:

    • 如果修改/增加glide.yaml中的版本, 执行一下glide up (主要用于开发)
    • 如果使用他人包/第三方包, 用glide install重新构建recreate的包环境 (主要用于部署)
  • glide get

    增加依赖, 会更新glide.yaml

    glide get github.com/Masterminds/semver
    glide get github.com/Masterminds/semver#~1.2.0

  • lock file

    glide.yml 包含依赖和version范围

    glide.lock 包含的是准确的依赖(commit id), 是否需要如git

  • glide novendor

    输出除了vendor以外的目录, 主要用于测试, 如: go test $(glide novendor)

  • glide name

    输出 glide.yml声明的包名

  • glide list

    输出项目import的包名

问题: 依赖的依赖, 如何可以识别并解决? 只能每次试错吗?

glide update –all-dependencies


参考

  • https://glide.readthedocs.io/en/latest/
  • https://glide.readthedocs.io/en/latest/vendor/ 这里必看