安装node-sass有以下几个步骤:
校验本地node_modules中是否已安装node-sass,版本是否一致;如未安装或版本不符,从npm源安装node-sass本体;检测全局缓存和本地中是否有binding.node,如有即跳过安装;没有binding.node则从github下载该二进制文件并将其缓存到全局;假如binding.node下载失败,则尝试本地编译出该文件;将版本信息写到package-lock.json;由此看到,实际上node-sass依赖了一个二进制文件binding.node,从npm源安装完本体后还会从github下载binding.node。
因此安装node-sass相关的失败原因有以下几种:
原因一: npm源速度慢由于众所周知的国内网络环境,从国内安装官方源的依赖包会很慢。可以将npm源设置成国内镜像源(如淘宝npm):
npm config set registry https://registry.npm.taobao.org或者通过.npmrc文件设置:
// .npmrcregistry=https://registry.npm.taobao.org/ 原因二: binding.node源无法访问或速度慢node-sass除了npm部分的代码,还会下载二进制文件binding.node,默认源是github,国内访问较慢,特殊时期甚至无法访问。我们也可以将其改成国内源:
// linux、mac 下SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass// window 下set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ && npm install node-sass或者通过.npmrc文件设置:
// .npmrcsass_binary_site=https://npm.taobao.org/mirrors/node-sass/有类似问题的还有chromedriver,phantomjs,electron等常见依赖包,我们可以一并写到.npmrc中:
// .npmrcsass_binary_site=https://npm.taobao.org/mirrors/node-sasschromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriverphantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjselectron_mirror=https://npm.taobao.org/mirrors/electron 原因三: node版本与node-sass版本不兼容node-sass版本兼容性并不好,老项目中依赖的node-sass很可能已经不兼容新的node,对应版本兼容如下(或参考官方仓库):
NodeJSMinimum node-sass versionNode ModuleNode 134.13+79Node 124.12+72Node 114.10+67Node 104.9+64Node 84.5.3+57