来自 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 包
使用来自 env 变量的令牌从私有 Github 存储库安装 NPM 包