来自 GitHub 发布二进制文件的 NPM 安装/依赖项

Posted

技术标签:

【中文标题】来自 GitHub 发布二进制文件的 NPM 安装/依赖项【英文标题】:NPM install/dependency from a GitHub Release Binary 【发布时间】:2016-11-09 13:49:18 【问题描述】:

我知道如何从 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 存储库

相关

所以问题:How to install an npm package from GitHub directly? NPM 问题:https://github.com/npm/npm/issues/3055

【问题讨论】:

【参考方案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"

私人回购:

    创建私有访问令牌https://github.com/settings/tokens 创建您自己的 http 代理以从发行版下载断言。 https://developer.github.com/v3/repos/releases/#get-a-single-release-asset 将 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 私有存储库。

【讨论】:

以上是关于来自 GitHub 发布二进制文件的 NPM 安装/依赖项的主要内容,如果未能解决你的问题,请参考以下文章

模块解析:NPM 安装来自 Github 的 Typescript 包

从 Github 安装时自动构建 NPM 模块

使用来自 env 变量的令牌从私有 Github 存储库安装 NPM 包

来自 github 的 npm 包,缺少文件

无法从 Heroku 上的 package.json 从 github 安装 npm 包

如何让 npm 从 GitHub url 安装 typescript 依赖项?