如何彻底解决node包依赖错误

2,274 阅读2分钟

起因

最近看到一个不错的项目,想要学习一下,但是clone下来之后,竟然连npm包都无法安装!!

image.png

没错,又是万恶的node-gyp报错。不过作为一个地中海程序员,遇到bug必当消灭之!

发现问题思路

根据报错信息看起来node-gyp报错似乎是pyhton版本不匹配引起的,但问题是我其他项目都可以运行,为啥这个项目不行呢?而且我相信,作者上传的时候一定是可以在本地正常运行的。经过研究package.json这个文件,我发现这里的包版本都太老了,所以我断定可能是因为我本地的node版本比作者的版本高,所以导致才各个依赖无法正常安装。

解决问题思路

发现是node版本过高导致的包依赖异常。解决办法自然是安装与当前node版本匹配的包。因此我们需要:

  1. 先删除package.jsondependenciesdevDependencies
  2. 重新用node install -S xxxnode install -D xxx分别重装依赖包
  3. 安装过程中如果报错,常常是因为依赖包之间的依赖冲突导致的,因为有的包依赖高版本的webpack,有的依赖低版本的webpack
  4. 这时我们需要先把可以正常安装的包先安装好,有冲突的包单独安装,安装时注意安装顺序:

先安装依赖低版本webpack的包,再安装依赖高版本webpack的包

  1. 当安装依赖高版本的包时,还会报错:因为npm install命令默认安装最新版本的包,报错还是因为版本过高

image.png

  1. 所以这时我们需要指定版本安装,选择一个适合当前依赖的版本
  2. 我们需要一个命令查看包的版本历史: npm view xxxx versions

image.png

  1. 选择大版本的最后一个版本安装,如果报错则继续降低大版本,直到安装成功
  2. 至此应该是可以正确安装所有依赖包了,这时候可以运行项目yarn dev
  3. 如果运行报ERROR: PostCSS received undefined instead of CSS string,可以运行npm rebuild node-sass命令解决。

image.png

成功运行!!!

image.png

其他思路

既然是node版本过高引起的,那理论上也可以通过降低node版本来解决。所以可以通过nvm工具来管理低版本的node。

结尾

这套方法是我自己慢慢摸索处理的,虽然繁琐,但是应该是可以解决node包版本依赖的问题的.当然如果有小伙伴知道更好的解决方案,也可以留言分享出来,大家共同进步啊。