node.js - 夏普包 Heroku 部署问题
问题描述
我正在将我的 NodeJs 应用程序部署到 Heroku。在本地使用 nodemon 运行应用程序没有问题。
但是,当我尝试推送到 Heroku Master 时,似乎“尖锐”的包会导致问题:
远程: -----> 安装依赖项
远程:安装节点模块(package.json + package-lock)
偏僻的:
远程:> sharp@0.22.0 安装 /tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp
远程:>(节点安装/libvips && 节点安装/dll 复制 && 预构建安装)|| (节点 gyp 重建 && 节点安装/dll 复制)
偏僻的:
远程:信息尖锐下载 https://github.com/lovell/sharp-libvips/releases/download/v8.7.4/libvips-8.7.4-linux-x64.tar.gz
远程:
/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/install/libvips.js :86远程:抛出新的错误(
Status ${response.statusCode}
);远程:^
偏僻的:
远程:错误:状态 403
远程:在/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/install/libvips.js:86:17
远程:在 f (/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/once/once.js:25:25)
远程:在 ClientRequest.protocol.request.res (/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/simple-get/index.js:63:5)
远程:在 Object.onceWrapper (events.js:277:13)
远程:在 ClientRequest.emit (events.js:189:13)
远程:在 HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:556:21)
远程:在 HTTPParser.parserOnHeadersComplete (_http_common.js:109:17)
远程:在 TLSSocket.socketOnData (_http_client.js:442:20)
远程:在 TLSSocket.emit (events.js:189:13)
远程:在 addChunk (_stream_readable.js:284:12)
远程:make:进入目录'/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/build'
远程:TOUCH Release/obj.target/libvips-cpp.stamp
远程:CXX(target) Release/obj.target/sharp/src/common.o
远程:../src/common.cc:25:10:致命错误:vips/vips8:没有这样的文件或目录
远程:#include
远程:^~~~~~~~~~~~
远程:编译终止。
远程:sharp.target.mk:128:目标“Release/obj.target/sharp/src/common.o”的配方失败
远程:make:*** [Release/obj.target/sharp/src/common.o] 错误 1
远程:制作:离开目录'/tmp/build_4cfeda2379ea362c72ac083b57638cce/node_modules/sharp/build'
更新:
尝试从 package.json 中删除 sharp 并这次使用 npm install sharp works 重新添加它......我仍然不知道为什么。
远程: -----> 安装依赖项
远程:安装节点模块(package.json + package-lock)
偏僻的:
远程:> sharp@0.22.0 安装 /tmp/build_5c8d3b01594e0b86f9d3e0d372534414/node_modules/sharp
远程:>(节点安装/libvips && 节点安装/dll 复制 && 预构建安装)|| (节点 gyp 重建 && 节点安装/dll 复制)
偏僻的:
远程:信息尖锐下载 https://github.com/lovell/sharp-libvips/releases/download/v8.7.4/libvips-8.7.4-linux-x64.tar.gz
远程:添加来自 92 个贡献者的 57 个包,并在 10.683 秒内审核了 20393 个包
远程:发现 62 个低严重性漏洞
远程:运行
npm audit fix
以修复它们,或npm audit
获取详细信息偏僻的:
远程: -----> 构建
偏僻的:
远程: -----> 缓存构建
远程:-node_modules
偏僻的:
远程:-----> 修剪 devDependencies
remote:8.181s 内移除 606 个包,审计 497 个包
远程:发现 0 个漏洞
偏僻的:
偏僻的:
远程: -----> 构建成功!
解决方案
有这个问题的人很多,它与 libvips 相关,因为依赖关系本身并不尖锐。
在此问题评论中的 github 上,问题得到了解释:
预构建的 sharp 二进制文件只保证与 libvips 的预构建二进制文件一起使用。
如果下载 libvips 的预构建二进制文件失败,则 sharp 必须回退到尝试从源代码构建自身。
http://sharp.pixelplumbing.com/en/stable/install/#pre-compiled-libvips-binaries提供有关从本地 URL 提供 libvips 二进制文件的信息。
下载失败的原因可能是缓存或下载损坏,如上述 github 上的链接问题中报告的:
我不得不手动删除并重
~/.npm/_libvips/libvips-8.7.0-linux-x64.tar.gz
试。似乎下载了一个损坏的文件。
这是关于与 gatsby 相关的同一问题的有趣讨论,即使问题已关闭(在发表任何评论之前),解决方案似乎还不存在:https ://github.com/gatsbyjs/gatsby/issues/1754
但是,如果由于某种原因问题仅与下载有关,则可以按照手册中的说明在本地部署 libvips :
预编译的 libvips 二进制文件
此模块将尝试在以下任一条件下下载预编译的 libvips 包及其在 Linux 和 Windows 机器上的依赖项:
- 如果找不到满足最低版本
要求的全局安装libvips;- 如果
SHARP_IGNORE_GLOBAL_LIBVIPS
设置了环境变量。SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install sharp
如果您需要手动下载和检查这些文件,
可以通过https://github.com/lovell/sharp-libvips/releases进行如果您希望从自己的位置安装这些,请设置
sharp_dist_base_url
npm 配置选项,例如npm config set sharp_dist_base_url "https://hostname/path/" npm install sharp
或设置
SHARP_DIST_BASE_URL
环境变量,例如SHARP_DIST_BASE_URL="https://hostname/path/" npm install sharp
使用
https://hostname/path/libvips-x.y.z-platform.tar.gz
.
所以这有点背景,我知道这不能真正被视为解决方案的答案:/
推荐阅读
- android - Google Play 政策:如果我复制代码只是为了向学习者展示,我的应用会被禁止吗?
- clang - 如何修复介子生成不正确的链接器标志(--subsystem 控制台)
- javascript - 检查 .match() 结果是否不为空
- python - 循环获取多位作者的隶属关系信息
- javascript - 如何在 CodeIgniter 中使用 JavaScript 设置 PHP cookie
- jenkins - 如何从 Jenkins 声明式管道中的文本文件填充 ChoiceParameter?
- java - 检查项目是否已存在于数据库中
- python - 如何根据先前的单元格值优化更新单元格/如何优雅地将单元格的值传播到其他单元格?
- javascript - 如何在不访问源代码的情况下从 webpack 条目编译输出中提取块
- python - 未找到 TensorFlow codart64_101.dll