一、背景
最近新接手了一个老项目,在启动项目阶段遇到了安装node-sass依赖的问题,这里简单记录下解决方案。
二、执行npm install node-sass时发生了什么?
- 如果本地有缓存命中,则安装本地缓存
- npm 拉下 node-sass包
- 根据node版本,从github下载对应的binding.node编译器
- 如果下载编译器失败或github没有对应node版本的编译器资源则尝试本地编译
- 使用python2进行本地编译
三、常见问题
安装过程中,经常会安装失败,常见的问题有:
- 无法稳定的访问github导致下载binding.node资源失败,需要本地编译
- 本地使用的node版本没有对应的binding.node编译器,需要本地编译
- mac12.3之后默认移除了apple command-line-tools中的python2,导致本地编译的时候确实环境导致失败
四、解决方案
其实问题最主要的原因就是无法下载编译好的binding.node资源,所以解决这个问题的优先思路就是保证能下载到编译好的binding.node资源,尽可能不进行本地编译(过于耗时)。
解决步骤:
1. 使用镜像源
在项目中增加.npmrc,给node-sass的编译器配置镜像源,确保binding.node资源能够下载成功
1 | sass_binary_site=http://cdn.npm.taobao.org/dist/node-sass |
2. 使用特定node版本
根据项目中node-sass的版本,在github上找到对应的node版本,确保能从github/加速源下载到编译好的binding.node资源
具体版本可以参考:Node-Sass Node version support policy
这个只是面对老项目时,临时安装node-sass的解决方案,最终的解决方案,是使用dart-sass替换node-sass。