原文链接
作者 李平海

node-sass是我们开发中很常见的依赖包,也是安装时间冗长和最常见到报错的依赖。
安装node-sass失败原因有很多种,我们在说失败原因之前,先来分析一下node-sass的安装过程(以下node版本为v10.15.3):

PS D:\demo> npm i node-sass

// 从npm源安装到node_modules
> node-sass@4.13.0 install D:\demo\node_modules\node-sass
> node scripts/install.js

// 下载binding.node
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.13.0/win32-x64-64_binding.node
Download complete .] - :
Binary saved to D:\demo\node_modules\node-sass\vendor\win32-x64-64\binding.node

// 缓存binding.node
Caching binary to C:\Users\leepi\AppData\Roaming\npm-cache\node-sass\4.13.0\win32-x64-64_binding.node

> node-sass@4.13.0 postinstall D:\demo\node_modules\node-sass
> node scripts/build.js

Binary found at D:\demo\node_modules\node-sass\vendor\win32-x64-64\binding.node
Testing binary
Binary is fine

// 写package-lock.json
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN demo@1.0.0 No description
npm WARN demo@1.0.0 No repository field.

  • node-sass@4.13.0
    added 174 packages from 138 contributors and audited 529 packages in 24.379s
    found 0 vulnerabilities

我们可以看到,安装node-sass有几个步骤:

  1. 校验本地node_modules中是否已安装node-sass,版本是否一致;
  2. 如未安装或版本不符,从npm源安装node-sass本体;
  3. 检测全局缓存和本地中是否有binding.node,如有即跳过安装;
  4. 没有binding.node则从github下载该二进制文件并将其缓存到全局;
  5. 假如binding.node下载失败,则尝试本地编译出该文件;
  6. 将版本信息写到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文件设置:

// .npmrc
registry=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文件设置:

// .npmrc
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

有类似问题的还有chromedriver,phantomjs,electron等常见依赖包,我们可以一并写到.npmrc中:

// .npmrc
sass_binary_site=https://npm.taobao.org/mirrors/node-sass
chromedriver_cdnurl=https://npm.taobao.org/mirrors/chromedriver
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs
electron_mirror=https://npm.taobao.org/mirrors/electron

原因三: node版本与node-sass版本不兼容

node-sass版本兼容性并不好,老项目中依赖的node-sass很可能已经不兼容新的node,对应版本兼容如下(或参考官方仓库):

NodeJS Minimum node-sass version Node Module
Node 13 4.13+ 79
Node 12 4.12+ 72
Node 11 4.10+ 67
Node 10 4.9+ 64
Node 8 4.5.3+ 57

本文开头的安装例子中,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中查到:

PS D:\demo> node
> console.log(process.versions);
{ http_parser: '2.8.0',node: '10.15.3',v8: '6.8.275.32-node.51',uv: '1.23.2',zlib: '1.2.11',ares: '1.15.0',modules: '64',nghttp2: '1.34.0',napi: '3',openssl: '1.1.0j',icu: '62.1',unicode: '11.0',cldr: '33.1',tz: '2018e' }
undefined
>

如上显示,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的版本即可。

原因四: 缓存中binding.node版本不一致

假如本地node版本改了,或在不同机器上运行,node版本不一致,会报类似错误:

Found bindings for the following environments:- Windows 64-bit with Node.js 6.x

这是因为原有binding.node缓存跟现node版本不一致。按提示npm rebuild node-sass或清除缓存重新安装即可。

原因五: 安装失败后重新安装

安装失败后重新安装,有可能无权限删除已安装内容,此时npm uninstall node-sass或手动删掉原目录后再安装即可。

原因六: 提示没有安装python、build失败等

假如拉取binding.node失败,node-sass会尝试在本地编译binding.node,过程就需要python。假如你遇到前面几种情况解决了,实际上也不会出现在本地构建的情况了,我们就不谈这种失败中失败的情况吧 :-)

node-sass 安装失败,原因总结相关推荐

  1. wordcloud安装失败原因和解决方法

    wordcloud安装失败原因和解决方法 参考文章: (1)wordcloud安装失败原因和解决方法 (2)https://www.cnblogs.com/Lynn123/p/11907440.htm ...

  2. 计算机显卡初始化失败,电脑显卡驱动安装失败原因,其解决办法

    原标题:电脑显卡驱动安装失败原因,其解决办法 电脑显卡驱动,可能因为很多问题,导致出现失败,有兼容性,也有数字签名,更可能因为Windows installer服务没有开启导致. 每个问题都有不同的解 ...

  3. TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法

    TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法 参考文章: (1)TI CC2540 USB CDC Serial Port驱动安装失败原因及解决方法 (2)ht ...

  4. go mysql 错误_mysql安装失败原因和解决方法

    mysql数据库安装不了了!mysql最后一步安装不上!mysql就是安装不上!是不是很头疼,很伤脑筋,现在大家不用着急了,小编为大家整理了mysql安装失败的原因以及mysql安装失败的解决方法,抓 ...

  5. mysql装不上怎么办_MySQL数据库之mysql安装不上怎么办 mysql安装失败原因和解决方法...

    本文主要向大家介绍MySQL数据库之mysql安装不上怎么办 mysql安装失败原因和解决方法了 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. mysql数据库安装不了了!my ...

  6. MySQL安装失败原因及解决方案

    1.最后一步安装失败 原因: 安装路径中包含中文(很有可能是你之前将你的电脑名改成包含中文的了) 解决方法: 安装前,检查电脑名是否包含中文,(或者安装过程中勾选Show Advanced and L ...

  7. vs2010旗舰版 安装失败原因

    vs2010旗舰版  安装失败原因 今天换系统,重新安装VS2010旗舰版,以前用的好好的,但是今天装总是报错,错误类型如下: 引起错误原因: (1)上次安装文件没有清除干净: (2)因为安装包是破解 ...

  8. mysql安装失败原因和解决方法

    mysql数据库安装不了了!mysql最后一步安装不上!mysql就是安装不上!是不是很头疼,很伤脑筋,现在大家不用着急了,小编为大家整理了mysql安装失败的原因以及mysql安装失败的解决方法,抓 ...

  9. iOS ipa 安装包安装失败原因

    前言 iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面将一些常见原因总结如下,方便开发者进行排查. 在 iOS 9 中启动应用时,出现提示"未受信任的企业 ...

  10. android无法安装ios应用程序,蒲公英 - 文档中心 - iOS 应用安装失败原因排查

    iOS 的内测应用在安装时,很多人都遇到过安装失败的情况,安装失败的原因比较多,下面我们将一些常见原因总结如下,方便开发者进行排查. 启动应用时,出现提示"未受信任的企业级开发者" ...

最新文章

  1. uboot中添加新型号步骤以及编译方法
  2. 产品生涯你无法躲开的设计:微信授权登录
  3. 组播应用场景_推介4K IP切换系统在5G媒体集成制作中的应用
  4. 一款黑科技让普通屏幕秒变触摸屏,厉害了我的哥
  5. WPF 分页控件的简单实现
  6. Registry注册机制
  7. 漫步线性代数十二——网络
  8. 王思聪怒了!大众点评紧急道歉:相关账户已冻结
  9. Java编写学生类student程序_编写一个JAVA程序片断定义一个表示学生的类student.docx...
  10. 在Hyper-V主机中支持VLAN
  11. sap 一代增强_SAP 4代增强
  12. ADN8831ACPZ特征TPS63020DSJR应用 具有 4A 开关转换器
  13. 谷歌浏览器如何自动运行flash
  14. qt 一个应用程序有2个主窗口,任务栏只有一个应用程序图标
  15. 微信小程序—查询快递
  16. 校园疫情防控系统毕业设计,校园疫情防控管理系统设计与实现,校园疫情防控系统论文毕设作品参考
  17. Quartz自动任务
  18. 全球No.1集装箱人工智能领军企业中集飞瞳,已完成上百万AI集装箱箱况检测,上亿箱信息识别,全球最先进集装箱AI动态感知箱况检测
  19. 微信公众号增粉秘籍:三大矩阵简介
  20. 大学生免费查题公众号_大学生查题福利公众号,免费,完全免费!

热门文章

  1. 与计算机专业的社会学的论文,计算机专业研究生论文致谢词
  2. 薇娅直播卖火箭,B 站酒泉发卫星,航天贴标生意凭什么?
  3. 用于发现软件定义无线电的实时频谱分析仪设备的网络协议
  4. Java—求最大公约数和最小公倍数
  5. 计算机无法同步时间同步,在win10中,为什么电脑时间不能同步?
  6. Linux版phpstudy搭建
  7. SpringBoot + Vue基本知识点荟萃
  8. LINUX下DNS的查看和配置,Linux系统中查看和修改DNS配置的方法
  9. VUE table下载XLSX文件
  10. fastp manul page