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

假设我已经用一个bug修复了一个节点模块,我想使用我的固定版本,当然是在一个特性分支上,直到bug修复被合并并发布。

如何在package.jsondependencies中引用我的固定版本?

277383 次浏览

npm文档,使用一个git URL:

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


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

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

<user>/<project>#<branch>

更新2022

不要在GitHub上使用git://协议,因为它是不支持协议

npm ERR!   The unauthenticated git protocol on port 9418 is no longer supported.
npm ERR! Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.

根据@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-dependencies

Git url作为依赖项

Git的url是这样的:

< p > git+ssh://git@github.com:npm/cli.git#v1.0.27 git+ssh://git@github.com:npm/cli#semver:^5.0 git+https://isaacs@github.com/npm/cli.git
git://github.com/npm/cli.git#v1.0.27 < / p >
如果提供了#<commit-ish>,它将被用于精确地克隆该提交。如果比;commit-ish的格式为#semver:<semver><semver>可以是任意 有效的semver范围或确切的版本,NPM将寻找任何标签或参考 在远程存储库中匹配该范围,就像在注册中心中一样 依赖。如果既没有指定#<commit-ish>也没有指定#semver:<semver>,那么

.

.

GitHub的url

从版本1.1.65开始,你可以用"foo"来引用GitHub url: “用户/ foo-project"。就像git url一样,一个类似提交的后缀可以是 包括在内。例如:< / p >
{
"name": "foo",
"version": "0.0.0",
"dependencies": {
"express": "expressjs/express",
"mocha": "mochajs/mocha#4727d357ea",
"module": "user/repo#feature\/branch"
}
}```

如果你想要使用develfeature分支,或者你还没有将某个包发布到NPM注册表中,或者因为它是私有模块而不能,那么你可以在package.json中指向git:// URI而不是版本号:

"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。

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

npm install gitAuthor/gitRepo#tag

如果repo是一个有效的NPM包,它将在包中自动别名化。json:

< p > <代码> { :“NPMPackageName gitAuthor / gitRepo #标签” 代码}< / > < / p >

如果你能把这个添加到@justingordon的答案中,现在就不需要手动别名了!

如果这对任何人都有帮助,我尝试了上面的所有方法(https w/token模式)-仍然没有任何工作。我没有得到错误,但什么都不会安装在node_modules或package_lock.json。如果我更改了令牌或回购名称或用户名中的任何字母,等等-我会得到一个错误。所以我知道我有正确的代币和回购名称。

我最终意识到这是因为包中依赖项的名称。Json与包中的名称不匹配。我试图拉的回购的json。甚至npm install——verbose也没有说有任何问题。它似乎忽略了依赖关系w/o错误。

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

模板:

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

Package.json中的用法示例:

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