【问题标题】:NPM install/dependency from a GitHub Release Binary来自 GitHub 发布二进制文件的 NPM 安装/依赖项
【发布时间】:2023-03-25 22:36:01
【问题描述】:

我知道如何从 GitHub 版本中创建 NPM 依赖项:

"dependencies": {
  "package-name": "user/repo#v1.0.0"
}

很好,但我想安装此版本的特定二进制文件

我试过了

"dependencies": {
  "package-name": "https://github.com/user/repo/releases/download/v1.0.0/bin.tgz"
}

但我给了我以下错误:

❯ npm install
npm ERR! fetch failed https://github.com/user/repo/releases/download/v1.0.0/bin.tgz
npm WARN retry will retry, error on last attempt: Error: fetch failed with status code 404

二进制发布资产 exist outside of GitHub 并且正在使用 AWS S3。

URL github.com/user/repo/releases/download/v1.0.0/bin.tgz 正在重定向,状态为302,HTTP 位置标头设置为https://github-cloud.s3.amazonaws.com/releases/XXX/XXX...

如果我直接尝试使用 S3 URL,我会收到 ENAMETOOLONG 错误 (see NPM issue):

> npm install https://github-cloud.s3.amazonaws.com/releases/XXX/XXX...
npm ERR! tarball.destroy is not a function
npm WARN retry will retry, error on last attempt: Error: ENAMETOOLONG: name too long, open '/var/folders/pn/......

问题:

  • 为什么 NPM 不遵循重定向?
  • 为什么是404
  • 有没有办法将 NPM 依赖项链接到 GitHub 版本的二进制 tarball?怎么样?

我的背景和需求:

  • 我有一个私人 GitHub 存储库
  • 我的包需要在“部署”之前构建(transpilation等)
  • 我想在我的 GitHub 版本中“发布”此构建的 tarball,并将其直接引用到我的 NPM 依赖项
  • 我使用 CI 服务构建、制作 tarball 并将其上传到 GitHub 版本旁边
  • 我想使用 GitHub 发布二进制文件作为 NPM 存储库

相关

【问题讨论】:

    标签: github npm npm-install


    【解决方案1】:

    Github 版本基于 Git 标签。

    "...版本基于 Git 标签。”

    https://help.github.com/articles/creating-releases/

    要使用 Git URL 指定版本,请在末尾包含适当的 ,例如标签作为 URL 片段。 例如,对于名为 0.3.1 的标签:

    "dependencies": {
      "myprivatemodule": "git@github.com:...#0.3.1"
    }
    

    剪切部分(...)应填写:

    "myprivatemodule": "git@github.com:{owner}/{project}.git#0.3.1"
    

    而且,当 SSH 访问不可用时,需要使用不同的地址格式:

    "myprivatemodule": "git://github.com/{owner}/{project}.git#0.3.1"
    

    取自:npm install from Git in a specific version

    【讨论】:

    • 这可以很好地从代码库本身安装 npm,但不能使用上传到 github 版本的二进制文件(例如包含构建工件的 tarball)
    【解决方案2】:

    404 是因为您是私人仓库,并且没有在 url 中包含身份验证。

    公开回购:

    "agentframework": "https://codeload.github.com/agentframework/agentframework/tar.gz/beta"
    

    私人回购:

    1. 创建私有访问令牌https://github.com/settings/tokens
    2. 创建您自己的 http 代理以从发行版下载断言。 https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
    3. 将 http 代理 url 添加到您的 package.json 中

    package.json

    {
      "name": "test",
      "version": "1.0.0",
      "dependencies": {
        "agentframework": "https://codeload.github.com/agentframework/agentframework/tar.gz/beta"
      }
    }
    

    顺便说一句:您可以使用我在项目中使用的yarn install

    【讨论】:

    • 您能否更详细地解释一下您是如何设置 http 代理的?
    • 公共回购也发生同样的 404
    • @FLekschas,感谢您指出这个问题。我只是检查了代码,发现原因是因为 GitHub 更改了他们下载版本的域。我已经更新了答案。请尝试新域 codeload.github.com
    【解决方案3】:

    我不认为 npm 根据他们的文档提供了一种方法来执行此操作,他们支持使用 github 的 tarball,但不支持使用附加到发行版的特定二进制文件。 https://docs.npmjs.com/cli/install 我认为可行的唯一方法是下载文件并使用“npm install”文档中描述的“tarball 文件”方式。

    我在同一条船上,我想我最终会使用 npm 私有存储库。

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多