• node-sass安装失败的解决方法


    安装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文件设置:

    1. // .npmrc
    2. registry=https://registry.npm.taobao.org/

    原因二: binding.node源无法访问或速度慢

    node-sass除了npm部分的代码,还会下载二进制文件binding.node,默认源是github,国内访问较慢,特殊时期甚至无法访问。我们也可以将其改成国内源:

    1. // linux、mac 下
    2. SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass
    3. // window 下
    4. set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ && npm install node-sass

    或者通过.npmrc文件设置:

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

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

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

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

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

    NodeJSMinimum node-sass versionNode Module
    Node 134.13+79
    Node 124.12+72
    Node 114.10+67
    Node 104.9+64
    Node 84.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中查到:

    1. PS D:\demo> node
    2. > console.log(process.versions);
    3. { http_parser: '2.8.0',
    4. node: '10.15.3',
    5. v8: '6.8.275.32-node.51',
    6. uv: '1.23.2',
    7. zlib: '1.2.11',
    8. ares: '1.15.0',
    9. modules: '64',
    10. nghttp2: '1.34.0',
    11. napi: '3',
    12. openssl: '1.1.0j',
    13. icu: '62.1',
    14. unicode: '11.0',
    15. cldr: '33.1',
    16. tz: '2018e' }
    17. undefined
    18. >

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

  • 相关阅读:
    短视频开头怎么做?从三点出发,让你的短视频一开始就吸引用户
    【已解决】pycharm 突然每次点击都开新页面,关不掉怎么办?
    为什么 BI 软件都搞不定关联分析
    Sqli-labs靶场第13关详解[Sqli-labs-less-13]
    C++重载运算符的规则
    如何选择适合广西地区气候条件的建筑模板?
    面向专业开发者的Python IDE——PyCharm,各个版本如何抉择?
    大话YOLOV5
    【Linux内核】Linux内核介绍
    【数据结构】二叉树链式结构的实现
  • 原文地址:https://blog.csdn.net/yanzhi_2016/article/details/127706880