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