CentOS7+Cpanel环境安装Strapi遇sharp证书错误求助
问题描述
在CentOS 7+Cpanel的共享主机上,通过"set up node.js app"创建Node应用后,上传不含node_modules的Strapi文件,执行npm install时遇到sharp: Installation error: unable to get local issuer certificate错误。已尝试主机支持推荐的以下步骤,但均无效:
npm config set registry http://registry.npmjs.org/npm config set strict-ssl falsenpm install -g npm@latestnpm cache clear --force- 重新执行
npm install
同时尝试过用Yarn安装,依然失败。完整错误日志如下:
npm ERR! code 1
npm ERR! path /home/uniwebs/nodevenv/strapi/18/lib/node_modules/sharp
npm ERR! command failed
npm ERR! command sh -c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
npm ERR! sharp: 正在下载https://github.com/lovell/sharp-libvips/releases/download/v8.14.2/libvips-8.14.2-linux-x64.tar.br
npm ERR! sharp: 请查看https://sharp.pixelplumbing.com/install获取所需依赖
npm ERR! sharp: Installation error: unable to get local issuer certificate
npm ERR! 本次运行的完整日志可在以下路径查看:/home/uniwebs/.npm/_logs/2023-08-14T15_12_35_537Z-debug-0.log
可行解决建议
1. 手动指定CA证书路径
CentOS 7默认系统CA证书通常存放在/etc/pki/tls/certs/ca-bundle.crt,通过npm配置指定该路径,解决证书信任问题:
npm config set cafile /etc/pki/tls/certs/ca-bundle.crt
执行完成后重新运行npm install。
2. 强制sharp本地编译,跳过预编译包下载
设置环境变量让sharp跳过远程预编译包下载,直接在主机本地编译libvips:
export SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install
或者直接通过安装参数指定:
npm install --ignore-scripts=false --sharp_binary_host="" --sharp_libvips_binary_host=""
注意:本地编译需要主机安装gcc、make、glib2-devel等编译依赖,若共享主机未提供,需联系主机商开启相关编译权限或安装依赖。
3. 手动下载libvips预编译包并指定本地路径
- 用
wget跳过证书检查下载对应版本的预编译包:
wget --no-check-certificate https://github.com/lovell/sharp-libvips/releases/download/v8.14.2/libvips-8.14.2-linux-x64.tar.br
- 设置环境变量指定本地包的存放路径,再执行安装:
export SHARP_DIST_BASE_URL=file:///home/uniwebs/your-download-folder/ npm install
替换/home/uniwebs/your-download-folder/为你存放下载包的实际路径。
4. 降级sharp版本
当前Strapi依赖的sharp版本可能与共享主机环境兼容性较差,尝试在package.json中指定更低版本的sharp,例如:
"sharp": "^0.32.6"
删除package-lock.json或yarn.lock文件后,重新执行npm install。
内容的提问来源于stack exchange,提问作者Kronen Tre

