git - git+ssh 在像 git+ssh://git@github.com/xxx.git 这样的 npm repo 路径中是什么意思
问题描述
我看到了一个 npm 存储库,它在 package.json 中被称为git+ssh://git@github.com/xxx.git
. 我知道这是 ssh 协议,但我不知道 git+ssh 在克隆 repo 时会做什么,我只使用git@github.com/xxx.git
. 我四处搜索,但无法找到任何结果。
解决方案
当通过 git 托管 npm 包时,npm 还需要知道使用哪种传输协议将包文件从 repo 传输到客户端。为此,存在以下选项:ssh、https、http、文件(请参阅https://docs.npmjs.com/cli/install)。
npm 的创建者决定将这些信息放在协议名称中,用+
符号分隔信息,这样它就变得更加示意性了。因此,当npm install
迭代您的依赖项并看到一个依赖项时,git+ssh
它知道它将通过连接到存储库ssh
,然后使用您的本地git
二进制文件在本地签出项目文件。
我猜他们也可以将协议命名gitwithssh
为 in,gitwithssh://git@github.com/xxx.git
但git+ssh
看起来更简洁且逻辑上分开,因此更容易通过正则表达式进行解析。
这是 npm 源代码中实际负责将协议信息拆分为type
(= git
) 和实际协议 (eg ssh
) 的部分:https ://github.com/npm/npm-package-arg/blob/v7 .0.0/npa.js#L221
我只使用 git@github.com/xxx.git。
您不能使用这种格式将包注册为 npm 的依赖项。尝试执行npm i git@github.com/xxx.git
——它不起作用。这种格式只能通过例如使用git clone
。
但是,您可以在使用 ssh 协议作为前缀时使用此格式:ssh://git@github.com/xxx.git
. 这实际上是 npm 在幕后使用的“git+ssh”的“规范化”形式(另请参阅https://github.com/npm/normalize-git-url如何将您的git+ssh://...
转换为ssh://git@...
)。
推荐阅读
- uwp - 在 XAML (UWP) 中使用十六进制将值分配给整数 DependencyProperty
- reactjs - 如何在material-ui中使用按钮作为链接做出没有下划线的反应并更改颜色文本?
- python-3.x - 使用 Boto3 S3 和 Lambda 自动创建 CSV 文件
- awk - 在行开始和结束之间查找: awk 使用 bash 变量并每次都添加新段落
- jquery - 当后代交互元素获得焦点时,jQuery keydown() 不会触发
- regex - Sed \w 字符类不适用于 mac 上的替换
- python - 了解 Pandas 中的 str.replace() 行为
- javascript - 所需的 PHP 文件有时动画不同
- c# - 对 String.Concat() 的单次调用花费 11.23 毫秒(根据统一分析器)
- react-native - npm install 不工作它显示 npm 包正在寻找资金 - 反应原生