我们在安装 node-sass 的时候总是会因为各种原因不成功,今天我就一口气把这些可能导致失败的坑汇总一下,以免以后再被坑。
node-sass 安装过程分析
首先了解一下 node-sass
安装的过程:
-
npm
拉下node-sass
包; -
根据
node
版本和node-sass
版本拉取对应的binding.node
编译器,原因是sass
的编译语言比较特殊,需要下载对应版本的编译器才能编译;(node scripts/install.js
阶段) -
如果能拉下
binding.node
就【安装成功】;如果找不到对应的
binding.node
包,即失败,然后就会尝试本地编译。
可能失败的原因
一、网络不稳定
首先要知道的是,安装 node-sass
时在 node scripts/install.js
这个阶段会从 github.com 上下载一个 .node
文件,大部分安装不成功的原因都源自这里,因为 GitHub Releases 里的文件都托管在 s3.amazonaws.com
上面,而这个网址在国内总是”网络不稳定”,所以我们需要通过第三方服务器下载这个文件。
解决办法
1. 使用淘宝镜像
然后重新执行 npm i node-sass
即可完成安装。
2. 使用梯子
假设你的梯子在你本地机器上开启了一个第三方服务器 127.0.0.1:1080
,那么只需按照下面的方法配置一下就能正常安装 node-sass
了(如果你开启的是 PAC 模式而不是全局模式,那还需要将 s3.amazonaws.com
加入 PAC 列表):
3. 本地指定.node文件
比如我们在安装 node-sass
的时候可以发现它需要下载具体版本对应的 .node
文件:
如果你的办公环境不能访问外网,那么可以从有网络的电脑上将.node
文件(下载对应 node-sass
版本以及对应操作系统的)下载过来,再传到离线的电脑上指定 binary
路径来安装,执行以下命令完成安装:
二、本地编译没有Python环境
方法1:通过 NPM 包
网络正常的情况下安装 node-sass
是不需要Python
环境的,如果拉不下来对应的binding.node
就会进入尝试【本地编译】,然后会检查是否具备的条件:需要python
环境,报的错一般就会提示python
没有安装(还是 Mac 香,自带python
环境没有这些烦恼),安装下面两个包可以快速解决:
不过需要注意:拉包的方式需要cmd用管理员模式打开! ! !
如果本地有网络还好,这两个包如果安装成功了,node-sass
基本就能安装成功了,但是如果你的办公环境限制网络可能也比较坑,参考:离线安装 node-gyp 。
方法2:搭建Python环境(建议2.7)
- 1、去官网下载 www.python.org/download/re… ;
- 2、安装成功之后,在环境变量中的系统变量新增
python
的安装路径; - 3、执行
npm rebuild node-sass
重构一下; - 4、再重新执行
npm install node-sass
三、node-sass版本与当前Node版本不匹配
因node版本与node-sass版本不匹配导致 binding.node
拉不下来,无法编译。
node-sass
版本的兼容性不好,老项目中依赖的 node-sass
很可能已经不兼容新的 node
版本,对应版本兼容参考如下(或官方仓库):
NodeJS | Supported node-sass version | Node Module |
---|---|---|
Node 15 | 5.0+ | 88 |
Node 14 | 4.14+ | 83 |
Node 13 | 4.13+, <5.0 | 79 |
Node 12 | 4.12+ | 72 |
Node 11 | 4.10+, <5.0 | 67 |
Node 10 | 4.9+ | 64 |
Node 8 | 4.5.3+, <5.0 | 57 |
Node <8 | <5.0 | <57 |
比如我在 Node 8
的环境下安装 node-sass@3.13.1
, 安装的时候就会出现找不到对应的 binding.node
而报错,如下:
出现 404 了,此时更换 node-sass
或 node
的版本即可。
具体参考方案:
因为Node 8
不能装 node-sass 3.x
这是肯定的(Node 7
才对应 3.x
),所以得装 node-sass 4.x
。
如果项目中还有 gulp-sass
之类的包,而 gulp-sass 2.x
里面用了 node-sass 3.x
,还是会有坑,所以 gulp-sass
得换到 3.x
,建议安装 gulp-sass@3.2.1
。
四、没有清理缓存
每次装包失败报错后记得都要 npm uninstall xxx
清除装包错误留下的缓存。
比如 npm i -D node-sass
报错了,就要执行一遍 npm uninstall node-sass
,然后再重新安装。
常见镜像源设置
由于国内网络环境或者办公网络环境限制的原因,装 npm
包的时候总是会遇到各种坑,这里分享一些其他的常见 NPM 镜像地址设置:
结语
总算把 node-sass
的坑捋清楚了,如果还有其他的坑欢迎大家补充,但愿大家以后都能顺利安装 node-sass
,其实也可以用 dart-sass 无缝替换 node-sass 了!dart-sass
兼容 node-sass
的 API,而且安装过程无需下载二进制文件,这样大家就不需要再去踩 node-sass
的坑了,哦不,less
它不香吗?