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条目,就像公共模块一样。

https://docs.npmjs.com/files/package.json#dependencies