npm install 报node-sass错误,node-sass坑

1,661 阅读2分钟

node-sass是开发项目中常见的依赖包,也是安装时间和最容易报错的依赖包,以下就是本人在对项目进行npm install时遇到的问题,会遇到这个让人头疼的报错。下面的总结希望对阅读这篇粗文的你对所帮助。 报错如下:

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.9.3/win32-x64-64_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.9.3/win32-x64-64_binding.node":
 
connect ETIMEDOUT 54.231.33.155:443
 
Timed out whilst downloading the prebuilt binary
 
Hint: If github.com is not accessible in your location
      try setting a proxy via HTTP_PROXY, e.g.
 
      export HTTP_PROXY=http://example.com:1234
 
or configure npm proxy via
 
      npm config set proxy http://example.com:8080
      .....
  • 出现Cannot download "github.com/sass/node-s…...不能下载问题,这只是字面意思,其实已经下好了。接下来带大家找找看:

解决方法:

  1. 找到如下的配置目录(一般情况都是这个目录) C:\Users\ASUS\AppData\Roaming\npm-cache\node-sass, (本例中的node-sass是如下的版本4.11.0),可以看到该目录下对应的node-sass包版本的文件夹中win32-x64-64_binding.node已存在,但为什么还会报错呢?不言而喻,重点就是【需要配置环境变量的】
"node-sass": "^4.11.0",

2. 新建系统变量

变量名:SASS_BINARY_PATH

变量值:C:\Users\lenovo\AppData\Roaming\npm-cache\node-sass\4.9.3\win32-x64-59_binding.node 注意:路径因人而异

大功告成了,然后再去操作项目试试吧!但是这样的操作会有一个小问题,只能解决指定版本的问题,但是对于node-sass的迭代可以按提示npm rebuild node-sass或清除缓存重新安装即可。

问题解决了,但是还想再额外补充一个小知识点,相信对node-sass不了解的同学不知道其实node-sass的兼容性很差,旧项目中依赖的node-sass很可能已经不兼容新的node,对应版本兼容如下(或参考官方仓库):

本文开头的安装例子中,binding.node的版本是v4.11.0/win32-x64-64_binding.node,可以看到,里面包括node-sass版本号v4.11.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的版本即可。