npm从Git安装在一个特定的版本
假设我已经写了一个Node.js的模块,我想保持私有。 我知道我可以(应该)添加该行:
"private": "true"
到package.json
文件,我也知道我可以使用文件系统path或链接到git存储库(包括GitHub)来npm install
此模块。
我也知道,我可以把这样的文件系统path或链接到一个git仓库到package.json
,所以dependencies
部分可能看起来有点像这样:
"dependencies": { "myprivatemodule": "git@github.com:..." }
我现在想要的不是链接到最新版本,而是一个特定的版本。 我知道的唯一可能性是使用其ID来链接到特定的提交。 但是这比使用0.3.1
这样的版本号可读性差,维护性差。
所以我的问题是:是否可以指定这样一个版本号,并使npmsearch包含此版本的最新提交的git存储库?
如果不是的话,你如何解决你的项目中的这个问题? 你住的提交ID还是有更好的解决办法吗?
必须通过指定version
描述符才能从registry
中获得相关性 。
你当然可以创build和使用自己的registry,而不是registry.npmjs.org
如果你的项目不应该公开共享。
但是,如果它不在registry中,则必须通过URL或Git URL进行引用。 要使用Git URL指定版本,请在末尾包含适当的<commit-ish>
(如标记)作为URL片段 。
例如,对于名为0.3.1
的标签:
"dependencies": { "myprivatemodule": "git@github.com:...#0.3.1" }
注意 :上面的代码片段显示的基本URL与问题中发布的相同。
剪切的部分(
...
)应填入:"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"
而且,当SSH访问不可用时,将需要不同的地址格式:
"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"
根据您的操作系统,您也可以link
到您从Github克隆的其他文件夹中的依赖项。
接受的答案不适合我。 以下是我正在做的从github上下载一个软件包:
"dependencies": { "package": "git://github.com/username/package.git#commit" }
如果您的版本是指标签或发行版,那么github提供了这些链接。 例如,如果我想安装提取版本0.3.2(在npm上不可用),那么我添加到我的package.json
下的dependencies
:
"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",
与提交散列方法相比,唯一的缺点是散列可以保证不代表已更改的代码,而标记可以被replace。 谢天谢地,这很less发生。
更新:
现在我使用的方法是GitHub服务依赖关系的紧凑符号:
"dependencies": { "package": "github:username/package#commit" }
凡提交可以是任何东西提交,如标签。 在GitHub的情况下,你甚至可以删除最初的github:
因为这是默认的。
如果你使用多个模块来完成这个工作,并且想要对版本进行更多的控制,你应该考虑拥有你自己的私有npmregistry。
这样,你可以npm发布你的模块到你的私有npmregistry,并使用package.json条目,就像公共模块一样。