我正在将NodeJs应用程序部署到Heroku。在本地运行带有nodemon的应用程序没有问题。
但是,当我尝试推送到Heroku Master时,似乎出现了“ sharp”包引起问题:
远程:----->安装依赖项
远程:安装节点模块(package.json + package-lock)
远程:
远程:> sharp@0.22.0安装 / tmp / build_4cfeda2379ea362c72ac083b57638cce / node_modules / sharp
远程:>(节点安装/ libvips &&节点安装/ dll-copy && prebuild-install)|| (node-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_visible.js:284:12)
远程:make:进入目录 '/ tmp / build_4cfeda2379ea362c72ac083b57638cce / node_modules / sharp / build'
远程:触摸释放/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:目标配方 “发布/obj.target/sharp/src/common.o”失败
远程:make:*** [Release / obj.target / sharp / src / common.o]错误 1
远程:make:离开目录 '/ tmp / build_4cfeda2379ea362c72ac083b57638cce / node_modules / sharp / build'
更新:
尝试从package.json中删除Sharp,然后使用npm install再次将其重新添加。这次我仍然不知道为什么。
远程:----->安装依赖项
远程:安装节点模块(package.json + package-lock)
远程:
远程:> sharp@0.22.0安装 / tmp / build_5c8d3b01594e0b86f9d3e0d372534414 / node_modules / sharp
远程:>(节点安装/ libvips &&节点安装/ dll-copy && prebuild-install)|| (node-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
远程:在8.181秒内删除了606个程序包并审核了497个程序包
远程:发现0个漏洞
远程:
远程:
远程:----->构建成功!
答案 0 :(得分:1)
有很多人遇到这个问题,这与libvips有关,因为依赖本身并不十分明显。
在this issue-comment中的github上,该问题得到了解释:
Sharp的预构建二进制文件只能保证与libvips的预构建二进制文件一起使用。
如果预编译的libvips二进制文件的下载失败,则Sharp必须退回到尝试从源代码进行自身构建的方式。
http://sharp.pixelplumbing.com/en/stable/install/#pre-compiled-libvips-binaries提供了有关从本地URL提供libvips二进制文件的信息。
下载失败的原因可能是缓存,或下载损坏的下载,如在github上的上述链接问题中所述:
我必须手动删除
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1911) at Riccio_Lesson6.main(Riccio_Lesson6.java:51)
,然后重试。似乎是下载了损坏的文件。
关于与gatsby相关的同一问题,这里是一个有趣的讨论,即使该问题已关闭(在发表任何评论之前),似乎也没有解决方案:https://github.com/gatsbyjs/gatsby/issues/1754
但是,如果由于某种原因该问题仅与下载有关,则可以像manual中所述在本地部署libvips:
预编译的libvips二进制文件
该模块将尝试下载预编译的libvips软件包 及其在以下两种情况下对Linux和Windows计算机的依赖关系 这些条件:
- 如果libvips的全局安装符合最低版本
找不到要求;- 如果设置了
~/.npm/_libvips/libvips-8.7.0-linux-x64.tar.gz
环境变量。SHARP_IGNORE_GLOBAL_LIBVIPS
是否需要手动下载并检查这些文件,
进行操作
您可以通过https://github.com/lovell/sharp-libvips/releases如果要从自己的位置安装这些文件,请设置
SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install sharp
npm config选项,例如sharp_dist_base_url
或设置
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
。
所以这是一个背景,我知道这不能真正视为解决方案的答案:/
答案 1 :(得分:1)
如果有人到达这里却找不到答案-我的问题是我的项目使用的是旧节点版本(8.x)
解决方案是要安装Sharp的较旧版本-最新的支持8.x的版本-"sharp": "0.23.4"