依赖于package.json中使用git URL的分支或标签?


399

假设我已经用一个错误修正分叉了一个节点模块,并且我想在功能分支上使用我的固定版本,直到错误修正被合并并发布为止。

如何在的dependencies中引用固定版本package.json

Answers:


569

npm docs中

git://github.com/<user>/<project>.git#<branch>

git://github.com/<user>/<project>.git#feature\/<branch>

从NPM 1.1.65版本开始,您可以执行以下操作:

<user>/<project>#<branch>

130
从npm 1.1.65开始,Github URL可以更加简洁user/projectnpmjs.org/doc/files/package.json.html您可以附加分支user/project#branch
dantheta,2014年

2
git://github.com/<user>/<project>.git#feature/blah工作,但<user>/<project>.git#feature/blah没有...也许他们的正则表达式需要更高级才能考虑feature/blah在内。这是npmv1.4.28
pulkitsinghal,2015年

5
您如何包含版本号?
理查德

1
我可以对@hurrymaplelad进行同样的请求吗?如果是这样,命令如何?
roundrobin


136

每个@dantheta的评论:

从npm 1.1.65开始,Github URL可以更加简洁的用户/项目。npmjs.org/doc/files/package.json.html您可以像user / project#branch一样附加分支

所以

"babel-eslint": "babel/babel-eslint",

或在jscs上使用标记v1.12.0:

"jscs": "jscs-dev/node-jscs#v1.12.0",

请注意,如果您使用npm --save,则会得到更长的git

来自https://docs.npmjs.com/files/package.json#git-urls-as-dependencies

Git URL作为依赖项

Git网址可以采用以下形式:

git://github.com/user/project.git#commit-ish git + ssh:// user @ hostname:project.git#commit-ish git + ssh://user@hostname/project.git#commit- ish git + http://user@hostname/project/blah.git#commit-ish git + https://user@hostname/project/blah.git#commit-ish

commit-ish可以是任何标签,sha或分支,可以将其作为git checkout的参数提供。默认值为master。

GitHub网址

从1.1.65版本开始,您可以将GitHub URL简称为“ foo”:“ user / foo-project”。与git URL一样,可以包含提交后缀。例如:

{“名称”:“ foo”,
“版本”:“ 0.0.0”,
“依赖项”:{“表达式”:“ visionmedia / express”,“摩卡”:“ visionmedia / mocha#4727d357ea”}}


2
取决于提交,sha1应该是首选选项,特别是如果您依赖不受您控制的仓库。Git分支和标签不是一成不变的(可以被删除/更改,恶意地/偶然地),而(几乎)不可能创建sha1冲突。
jakub.g

1
我可以有一个分支和一个commit-ish的提交吗?
午休椅'17

45

如果要使用develfeature分支,或者尚未将某个软件包发布到NPM注册表中,或者因为它是私有模块而无法发布,则可以指向git://URI而不是版本号package.json

"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://git@github.com:user/repo.git#ref"
}

#ref部分是可选的,它可以是分支(如master),标记(如0.0.1)或部分或全部提交ID。


26

在最新版本的NPM中,您可以执行以下操作:

npm install gitAuthor/gitRepo#tag

如果仓库是有效的NPM软件包,它将在package.json中自动别名为:

{ "NPMPackageName": "gitAuthor/gitRepo#tag" }

如果您可以将其添加到@justingordon的答案中,则现在无需手动别名!


4
不,不是。它安装不正确。不知何故,它不包括存储库中的整个目录结构,而仅包括一些文件,例如package.json,yarn.lock,自述文件和许可证。没有src或dist文件夹。
StalkAlex

@StalkAlex docs.npmjs.com/cli/publish,然后检查要为构建脚本安装的存储库。也许它们被标记了,或者后安装对您不起作用,无论如何,这对特定软件包来说是一个问题,希望对您有所帮助!

@vortex谢谢,您所说的确切是什么意思?这怎么造成这样的问题?
StalkAlex

0

如果可以帮助任何人,我尝试了上述所有操作(https:// w / token模式)-仍然没有任何效果。我没有任何错误,但是在node_modules或package_lock.json中什么也不会安装。如果我更改了回购名称或用户名中的令牌或任何字母,等等。-我会收到错误消息。所以我知道我有正确的令牌和回购名称。

我终于意识到这是因为我在package.json中拥有的依赖项的名称与我尝试提取的回购的package.json中的名称不匹配。甚至npm install --verbose也不表示有任何问题。似乎只是忽略了没有错误的依赖关系。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.