Ubuntu20.04 Node16环境执行npm i报错gyp ERR! not ok无法安装依赖
问题解答
1. 为什么会存在两个版本的node-gyp,报错日志中调用的是v3.8.0版本?
你项目依赖的node-sass@4.14.1版本内部嵌套绑定了node-gyp@3.8.0作为自身的依赖,npm执行依赖安装时会优先调用子包自带的嵌套依赖,而不会使用你全局安装的高版本node-gyp,因此报错日志中显示的调用版本是v3.8.0。
2. 为什么执行npm i后项目目录下没有生成node_modules文件夹?
npm默认的安装机制为全量成功后才会提交最终的安装结果:只要有任意一个依赖安装/编译失败,npm会自动触发回滚操作,删除本次安装过程中已经下载生成的所有临时文件,因此你看不到部分安装的node_modules目录。
3. 如何修复该问题,让npm i可以正常完成依赖安装?
推荐优先选择无编译依赖的方案,彻底避免node-sass相关的编译问题:
- 方案一(最优解):将package.json中
node-sass依赖替换为官方推荐的替代包sass(即dart-sass),版本可选择^1.49.0,和你当前的sass-loader@10.0.3完全兼容,不需要修改业务代码,替换后重新执行npm i即可。 - 方案二(必须保留node-sass的情况):
- 先安装node-gyp 3.8.0依赖的python2环境:执行命令
sudo apt install python2,安装完成后配置npm的python路径:npm config set python /usr/bin/python2 - 安装基础编译工具链:执行命令
sudo apt install build-essential安装gcc、g++、make等编译必需工具 - 清理缓存和残留文件:执行命令
rm -rf package-lock.json ~/.npm - 重新执行
npm i即可
- 先安装node-gyp 3.8.0依赖的python2环境:执行命令
注意:
node-sass@4.14.1最高仅支持Node.js 14版本,你当前使用的Node.js 16版本和该版本node-sass本身就存在兼容性问题,就算完成编译环境配置也可能出现其他报错,强烈建议使用方案一替换依赖。
内容的提问来源于stack exchange,提问作者Ahmed M.Osman
相关产品推荐
相关产品推荐

