npm是前端开发常用的包管理工具。

如果需要依赖第三方包时,直接使用npm安装npm仓库中的包,但在日常工作和学习中,如果没有将开发好的包发布到npm仓库怎么办呢?

那么,可以是npm直接从git仓库进行安装,即便是内部的私有git仓库,也是支持的。

npm官方文档中,有写道:

Installs the package from the hosted git provider, cloning it with git. For a full git remote url, only that URL will be attempted.

<protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]

protocol is one of git, git+ssh, git+http, git+https, or git+file.

所以可以按照上面的格式来指定git包的地址和版本,例如:

npm install git+ssh://git@github.com:npm/cli.git#v1.0.27
npm install git+ssh://git@github.com:npm/cli#pull/273
npm install git+ssh://git@github.com:npm/cli#semver:^5.0
npm install git+https://isaacs@github.com/npm/cli.git
npm install git://github.com/npm/cli.git#v1.0.27

如果是git仓库是私有的,那么可以在git账号中配置SSH Keys即可。

如果SSH Keys都配置了,git账号权限也开了,遇到下面这个问题:

npm ERR! code 128
npm ERR! An unknown git error occurred
npm ERR! command git --no-replace-objects ls-remote git@gitlab.stnts.com:yunyouxi/suileyoo-echo-proto.git
npm ERR! command-line line 0: Bad yes/no/ask argument.
npm ERR! fatal: Could not read from remote repository.
npm ERR! 
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.

可以看出大概是这个引起的:npm ERR! command-line line 0: Bad yes/no/ask argument.

可以参考一下这两个issue:

https://github.com/npm/cli/issues/3578

https://github.com/npm/git/issues/31

猜测这是部分npm和git版本的问题。

最后,使用下面这个命令就可以install成功了。

GIT_SSH_COMMAND="ssh" npm install git+ssh://git@github.com:npm/cli.git#v1.0.27