ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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


P
Paul Verest

npm docs 中,使用 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:// 协议,因为它is not supported

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.

从 npm 1.1.65 开始,Github URL 可以更简洁user/projectnpmjs.org/doc/files/package.json.html 您可以像 user/project#branch 一样附加分支
git://github.com/<user>/<project>.git#feature/blah 有效,但 <user>/<project>.git#feature/blah 没有...也许他们的正则表达式需要更高级才能将 feature/blah 考虑在内。这是 npm v1.4.28
你如何包括版本号?
@hurrymaplelad 我可以对拉取请求做同样的事情吗?如果是这样,命令如何?
M
Mat Lipe

根据@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 的格式为: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

如果提供了 #,它将用于准确克隆该提交。如果 > commit-ish 的格式为 #semver: 可以是任何有效的 semver 范围或确切版本,npm 将在远程存储库中查找与该范围匹配的任何标签或引用,就像它会对于注册表依赖项。如果没有指定 # 或 #semver:,则使用 master。

GitHub URL 从 1.1.65 版本开始,您可以将 GitHub url 称为“foo”:“user/foo-project”。与 git URL 一样,可以包含 commit-ish 后缀。例如: { "name": "foo", "version": "0.0.0", "dependencies": { "express": "expressjs/express", "mocha": "mochajs/mocha#4727d357ea", "模块”:“用户/repo#feature\/branch”}}```


取决于提交 sha1 应该是首选选项,特别是如果您依赖于不受您控制的存储库。 Git 分支和标签不是不可变的(可以删除/更改,恶意/意外),而(几乎)不可能创建 sha1 冲突。
我可以有一个分支和一个提交的提交吗?
https git URL 呢?
F
Fizer Khan

如果您想使用 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。


v
vortex

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

npm install gitAuthor/gitRepo#tag

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

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

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


不是,不是。它安装不正确。不知何故,它不包括存储库中的整个目录结构,只有一些文件,如 package.json、yarn.lock、自述文件和许可证。没有 src 或 dist 文件夹。
@StalkAlex docs.npmjs.com/cli/publish 然后检查您正在安装的存储库以获取构建脚本。也许它们被标记了或者后安装对您不起作用,无论如何这都是该特定软件包的问题,希望这会有所帮助!
@vortex 谢谢,你所说的标记是什么意思?这是怎么产生这样的问题的?
M
MattS

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

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