git+ssh 在 git+ssh://git@github.com/xxx.git 这样的 npm 存储库路径中意味着什么

Han*_*Han 6 git github npm package.json

我看到了一个 npm 存储库,在 package.json 中被称为git+ssh://git@github.com/xxx.git。我知道这是 ssh 协议,但我不知道 git+ssh 在克隆存储库时做什么,我只使用git@github.com/xxx.git. 我用谷歌搜索了一下,但找不到任何结果。

B12*_*ter 5

当通过 git 托管 npm 包时,npm 还需要知道使用哪种传输协议将包文件从存储库传输到客户端。为此,存在以下选项:ssh、https、http、file(请参阅https://docs.npmjs.com/cli/install)。

\n\n

npm 的创建者决定将此信息放在协议名称中,用符号分隔信息,+使其变得更加示意性。因此,当npm install迭代您的依赖项并看到与之相关的依赖项时git+ssh,它知道它将通过连接到存储库ssh,然后使用本地git二进制文件在本地签出项目文件。

\n\n

我想他们也可以将协议命名gitwithssh为 in gitwithssh://git@github.com/xxx.git,但git+ssh看起来更简洁且逻辑上分离,因此更容易通过正则表达式进行解析。

\n\n

这是 npm 源代码中实际负责将协议信息拆分为type(= git) 和实际协议(例如ssh)的部分:https://github.com/npm/npm-package-arg/blob/v7 .0.0/npa.js#L221

\n\n
\n

我只使用 git@github.com/xxx.git。

\n
\n\n

您不能使用此格式将包注册为 npm 的依赖项。尝试执行npm i git@github.com/xxx.git\xe2\x80\x93 它不会工作。该格式只能使用,例如via git clone

\n\n

但是,您可以在使用 ssh 协议作为前缀时使用此格式:ssh://git@github.com/xxx.git。这实际上是 npm 在幕后使用的“git+ssh”的“标准化”形式(另请参阅https://github.com/npm/normalize-git-url如何将您的转换git+ssh://...ssh://git@...)。

\n