Craft CMS项目执行npm i报错code1 sharp依赖安装失败如何解决?
问题根源
- 项目依赖的
gulp-favicons@2.4.0版本过老,其间接依赖的sharp@0.23.x系列不支持Node 16版本,编译时会触发C++语法不兼容报错 - 降级Node时brew link不生效是因为系统默认Node路径优先级高于brew安装的node@14,或未执行强制link、添加环境变量操作
- 本地的
node-gyp@3.8.0版本过老,不支持Node 16的编译要求
可行解决方案
方案1:使用Node版本管理工具切换兼容版本(推荐,无需修改项目配置)
可以解决brew link不生效的问题,适配现有老项目的依赖配置:
- 先卸载brew安装的node@14避免路径冲突:
brew uninstall node@14 - 安装常用的Node版本管理工具nvm,安装完成后重启终端生效
- 安装兼容的Node 14长期支持版本:
nvm install 14.21.3 - 进入项目根目录执行
nvm use 14,临时切换当前终端的Node版本为14;如果需要永久生效可在项目根目录新建.nvmrc文件,内容填写14.21.3,后续进入项目会自动切换对应版本 - 清理原有缓存重新安装依赖:
rm -rf node_modules package-lock.json npm cache clean --force npm i
方案2:升级项目依赖适配Node 16
如果不想切换Node版本,可以升级相关依赖解决兼容问题:
- 卸载老版本的gulp-favicons:
npm uninstall gulp-favicons --save-dev - 安装适配高版本Node的gulp-favicons:
npm install gulp-favicons@latest --save-dev,新版本依赖的sharp已支持Node 16+ - 清理缓存重新安装依赖:
rm -rf node_modules package-lock.json npm cache clean --force npm i
注意:升级后如果gulp的favicon生成任务有API变动,需要对应调整gulpfile.js里的相关配置即可适配。
临时解决方案(无需使用favicon生成功能的场景)
如果当前开发阶段不需要用到favicon生成功能,可以选择以下任意一种方式跳过报错:
- 安装依赖时添加忽略脚本参数:
npm install --ignore-scripts - 在项目根目录新建
.npmrc文件,添加配置sharp_binary_host=https://npmmirror.com/mirrors/sharp,使用预编译的sharp包跳过本地编译步骤
内容的提问来源于stack exchange,提问作者Michael Butler
相关产品推荐
相关产品推荐

