node-sass安装失败的问题汇总

首先先了解node-sass安装的过程

1.npm拉下node-sass包
2.根据node版本和node-sass版本拉下binding.node编译器,原因是sass的编译语言比较特殊,需要拉下对应版本的编译器才能编译
3.如果拉下binding.node就成功,如果找不到对应的binding.node包,即失败,尝试本地编译。
4.本地编译会检查是否具备的条件:条件比较特殊,需要python编译环境,拉下面两个包可以解决。
npm install -g node-gyp
npm install --global --production windows-build-tools
5.本地编译成功,node-sass包拉取成功。

这是整个拉包的流程,说说容易遇到的坑

1.因node版本与node-sass版本不同导致binding.node拉不下来,无法编译。
node-sass版本兼容性并不好,老项目中依赖的node-sass很可能已经不兼容新的node,对应版本兼容如下(或参考官方仓库):在这里插入图片描述
本文开头的安装例子中,binding.node的版本是v4.13.0/win32-x64-64_binding.node,可以看到,里面包括node-sass版本号v4.13.0,平台win32,架构x64,以及Node Module的版本64。Node Module是node的一个模块,其版本号可以在进程process.versions中查到:
在这里插入图片描述
如上显示,node10.15.3对应的module版本为64。
假如node-sass与node的版本不兼容,就会找不到对应的binding.node而报错,例如你的node是10.15.3,装node-sass4.6.1,则会尝试安装v4.6.1/win32-x64-64_binding.node,但这个版本的binding.node是不存在的。
此时改node-sass或node的版本即可。

2.本地编译缺少环境,需要拉环境,拉环境过程中报错

1
2
3
4
5
6
 如果找不到对应binding.node包尝试本地编译,报的错一般就会提示python没有安装,那么可以拉下面两个包解决。
 
 **不过需要注意:拉包的方式需要cmd用管理员模式打开! ! !**
 npm install -g node-gyp
 npm install --global --production windows-build-tools
一般如果这两个包拉成功了,node-sass就能安装成功了。

3.没有清缓存
记得每次拉包报错后,都要uninstall清除拉包错误留下的缓存
比如 npm i node-sass --D 报错了
就要再打一遍 npm uninstall node-sass