在特定版本中从Git安装npm

假设我已经为Node.js编写了一个模块,我想使其保密。我知道我可以(应该)添加以下行:

"private": "true"

package.json文件,我也知道我可以npm install使用文件系统路径或git存储库(包括GitHub)的链接来使用此模块。

我也知道我可以将这样的文件系统路径或git repo的链接放入package.json,以便该dependencies部分看起来像这样:

"dependencies": {
  "myprivatemodule": "git@github.com:..."
}

我现在想要的不是链接到最新版本,而是链接到特定版本。我知道的唯一可能性是使用其ID链接到特定提交。但这比使用版本号(如)缺乏可读性和可维护性0.3.1

所以我的问题是:是否有可能指定这样的版本号,并使npm在git存储库中搜索包含该版本的最新提交?

如果没有,您如何在项目中解决此问题?您使用提交ID还是对此有更好的解决方案?

Harry小胖古一2020/03/24 11:56:58

如果您使用多个模块进行此操作,并且希望对版本进行更多控制,则应考虑拥有自己的私有npm注册表。

这样,您可以npm将模块发布到私有npm注册表中,并像对公共模块一样使用package.json条目。

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

LEYL2020/03/24 11:56:57

我的例子@qubyte评论上面得到切碎的,所以这里的东西是更易于阅读...

上面描述的方法@surjikal 适用于分支提交,但不适用于我尝试包含提交。


存档模式也适用于提交。例如,获取 @ a2fbf83

npm

npm install  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

纱线

yarn add  https://github.com/github/fetch/archive/a2fbf834773b8dc20eef83bb53d081863d3fc87f.tar.gz

格式

 https://github.com/<owner>/<repo>/archive/<commit-id>.tar.gz


是需要模式提交/archive/

yarn add  https://github.com/vuejs/vuex/archive/c3626f779b8ea902789dd1c4417cb7d7ef09b557.tar.gz

用于相关的vuex提交

Jim猪猪2020/03/24 11:56:57

该命令username/package从特定的git commit 安装npm软件包

npm install https://github.com/username/package#3d0a21cc

3d0a21cc是提交哈希的前8个字符。

2020/03/24 11:56:57

如果按版本表示标签或发行版,则github提供这些文件的下载链接。例如,如果我要安装提取版本0.3.2(npm上不提供),则将其添加到package.json下面dependencies

"fetch": "https://github.com/github/fetch/archive/v0.3.2.tar.gz",

与提交哈希方法相比,唯一的缺点是保证了哈希不能代表已更改的代码,而可以替换标签。幸运的是,这种情况很少发生。

更新:

这些天来,我使用的方法是GitHub服务依赖项的紧凑表示法:

"dependencies": {
  "package": "github:username/package#commit"
}

提交可以是任何提交,例如标记。对于GitHub,您甚至可以删除初始名称,github:因为它是默认名称。

老丝阿飞2020/03/24 11:56:57

我在这里描述了运行时遇到的一个问题npm install-程序包未出现在中node_modules

The issue was that the name value in package.json of installed package was different than the name of imported package (key in package.json of my project).

So if your installed project name is some-package (name value in its package.json) then in package.json of your project write: "some-package": "owner/some-repo#tag".

Stafan路易2020/03/24 11:56:57

接受的答案对我不起作用。这是我要从github提取软件包的操作:

npm install --save "git://github.com/username/package.git#commit"

或在package.json上手动添加它:

"dependencies": {
  "package": "git://github.com/username/package.git#commit"
}
小宇宙神无2020/03/24 11:56:57

一个依赖关系必须是可以从registry要由刚安装指定一个version描述符

当然您可以创建并使用自己的注册表,而不是registry.npmjs.org不应该公开共享您的项目。

但是,如果不在注册表中,则必须使用URLGit URL进行引用要指定带有Git URL的版本<commit-ish>,请在末尾作为URL片段包含相应的标记(例如标签)

例如,对于名为的标签0.3.1

"dependencies": {
  "myprivatemodule": "git@github.com:...#0.3.1"
}

注意:以上代码段显示的基本网址与问题中发布的网址相同。

删除的部分(...)应该填写:

"myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"

并且,当无法使用SSH访问时,将需要使用其他地址格式:

"myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"

根据您的操作系统,您可能还可以link将依赖项从Github中克隆到另一个文件夹中。