【问题标题】:Depend on a branch or tag using a git URL in a package.json?依赖于在 package.json 中使用 git URL 的分支或标签?
【发布时间】:2013-04-27 08:54:00
【问题描述】:

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

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

【问题讨论】:

    标签: git dependencies npm branch git-tag


    【解决方案1】:

    根据@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>,它将用于准确克隆该提交。如果 > commit-ish 的格式为 #semver:<semver><semver> 可以是任何 有效的 semver 范围或确切版本,npm 将查找任何标签或参考 匹配远程存储库中的该范围,就像注册表一样 依赖。如果没有指定#<commit-ish>#semver:<semver>,则 使用master。

    GitHub 网址

    从 1.1.65 版开始,您可以将 GitHub 网址称为“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"
     }
    }```
    

    【讨论】:

    • 依赖于提交 sha1 应该是首选选项,特别是如果您依赖于不受您控制的存储库。 Git 分支和标签不是不可变的(可以删除/更改,恶意/意外),而(几乎)不可能创建 sha1 冲突。
    • 我可以有一个分支和一个提交的提交吗?
    • https git URLs 怎么样?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      来自npm docs

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

      从 NPM 版本 1.1.65 开始,您可以这样做:

      <user>/<project>#<branch>
      

      【讨论】:

      • 从 npm 1.1.65 开始,Github URL 可以更简洁user/projectnpmjs.org/doc/files/package.json.html你可以像user/project#branch这样附加分支
      • git://github.com/&lt;user&gt;/&lt;project&gt;.git#feature/blah 工作但&lt;user&gt;/&lt;project&gt;.git#feature/blah 没有......也许他们的正则表达式需要更高级才能将feature/blah 考虑在内。这是 npm v1.4.28
      • 如何包含版本号?
      • @hurrymaplelad 我可以为拉取请求做同样的事情吗?如果是,命令如何?
      【解决方案4】:

      在最新版本的 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 谢谢,你所说的标记是什么意思?这是怎么造成这样的问题的?
      【解决方案5】:

      如果你想使用develfeature 分支,或者你还没有将某个包发布到NPM 注册中心,或者因为它是私有模块而不能发布,那么你可以指向一个@987654323 @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。

      【讨论】:

        猜你喜欢
        • 2016-05-15
        • 2016-09-26
        • 1970-01-01
        • 2023-03-30
        • 2019-07-08
        • 2019-10-10
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多