Node.js的依赖管理

在前端,我们通常使用npm管理依赖。

npm initpackage.jsonnpm install axiosaxiospackage.json
{
  "name": "module",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.21.1"
  }
}

package.json
package-lock.json
npm installnpm
  "dependencies": {
    "axios": {
      "version": "0.21.1",
      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
      "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
      "requires": {
        "follow-redirects": "^1.10.0"
      }
    },
    "follow-redirects": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
      "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg=="
    }
  }

axiosfollow-redirects
node_modules

Golang的依赖管理

Golang的依赖管理方案经历了一个曲折的过程。

GOPATH: 把所有的项目文件和依赖全部放在一个目录里,不同项目没办法使用不同版本的依赖,所以有了GOVENDOR。

GOVENDOR: 每个项目有自己的vendor目录,项目优先到vendor目录查找依赖,其次到GOPATH目录查找。

目前最新的Golang依赖管理是使用Go Modules。

go mod init 
go mod initnpm init
go get 
go getnpm install
$ go mod init github.com/noodanee/go-modules
go: creating new go.mod: module go-modules
$ go get github.com/go-resty/resty/v2
go get: added github.com/go-resty/resty/v2 v2.6.0
$ ls
go.mod  go.sum

github.com/noodanee/go-modules
github.com/go-resty/resty/v2
go.modgo.sum
module github.com/noodanee/go-modules

go 1.16

require github.com/go-resty/resty/v2 v2.6.0 // indirect


go.mod
go.modpackage.json
github.com/go-resty/resty/v2 v2.6.0 h1:joIR5PNLM2EFqqESUjCMGXrWmXNHEU9CEiK813oKYS4=
github.com/go-resty/resty/v2 v2.6.0/go.mod h1:PwvJS6hvaPkjtjNg9ph+VrSD92bi5Zq73w/BIH7cC3Q=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

go.sumpackage-lock.json

h1:开头的字符串,表示生成checksum的算法是第一版的hash算法,即sha256。

Node.jsnode_modulesGOMODCACHEGOMODCACHEgo envGOMODCACHE
cdGOMODCACHE
$ ls
cache  github.com  golang.org  google.golang.org

cdgithub.com/go-resty/resty
$ cd github.com/go-resty/resty
$ ls
v2@v2.6.0

@

总结

Node.jsGolangNode.jsGolangNode.jsnode_modulesGolang

看到这里,我相信你对Golang的依赖管理已经有了一个基本的认识。

欢迎关注我的公众号“野生程序员的修炼”,原创技术文章第一时间推送。