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

问题描述 投票:0回答:6

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

我如何在我的

dependencies
package.json
中引用我的固定版本?

git dependencies npm branch git-tag
6个回答
668
投票

解决方案1

来自 npm 文档,使用 git URL:

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

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

不要对 GitHub 使用

git://
协议,它不再受支持

解决方案2

从 NPM 版本 1.1.65 开始,您可以使用缩短的 github URL:

<user>/<project>#<branch>

155
投票

根据@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/cli/v6/configuring-npm/package-json#git-urls-as-dependency

Git URL 作为依赖项

Git url 的形式为:

git+ssh://[email protected]:npm/cli.git#v1.0.27
git+ssh://[email protected]:npm/cli#semver:^5.0
git+https://[email protected]/npm/cli.git

git://github.com/npm/cli.git#v1.0.27

如果提供了

#<commit-ish>
,它将用于准确克隆该提交。如果 > 提交的格式为
#semver:<semver>
,则
<semver>
可以是任何 有效的 semver 范围或确切版本,npm 将查找任何标签或引用 匹配远程存储库中的该范围,就像注册表一样 依赖性。如果
#<commit-ish>
#semver:<semver>
均未指定,则 大师正在使用。

GitHub URL

从版本 1.1.65 开始,您可以将 GitHub url 引用为“foo”: “用户/foo-项目”。就像 git URL 一样,commit-ish 后缀可以是 包括。例如:

{
 "name": "foo",
 "version": "0.0.0",
 "dependencies": {
   "express": "expressjs/express",
   "mocha": "mochajs/mocha#4727d357ea",
   "module": "user/repo#feature\/branch"
 }
}```

55
投票

如果你想使用

devel
feature
分支,或者你还没有将某个包发布到 NPM 注册表,或者因为它是私有模块而不能发布,那么你可以指向
git://
URI而不是您的
package.json
:

中的版本号
"dependencies": {
   "public": "git://github.com/user/repo.git#ref",
   "private": "git+ssh://[email protected]:user/repo.git#ref"
}

#ref
部分是可选的,它可以是分支(如
master
)、标签(如
0.0.1
)或部分或完整提交ID。


28
投票

在最新版本的 NPM 上你可以这样做:

npm install gitAuthor/gitRepo#tag

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

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

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


0
投票

如果您想使用任何特定的提交;你可以用这个

模板:

github:{UserName}/{RepoName}#{CommitId}

Package.json中的使用示例:

"react": "github:facebook/react#e40893d097f6894b4768d749f796302c57161734"

-2
投票

如果它对任何人有帮助,我尝试了上面的所有内容(https w/token 模式) - 但仍然没有任何效果。我没有收到任何错误,但 node_modules 或 package_lock.json 中不会安装任何内容。如果我更改了令牌或存储库名称或用户名中的任何字母等 - 我会收到错误。所以我知道我有正确的代币和存储库名称。

我终于意识到这是因为我的 package.json 中的依赖项名称与我试图拉取的存储库的 package.json 中的名称不匹配。即使 npm install --verbose 也没有说有任何问题。它似乎只是忽略了没有错误的依赖关系。

© www.soinside.com 2019 - 2024. All rights reserved.