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
ode_modules
ode-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
ode_modules
ode-sassvendorwin32-x64-64inding.node

// 缓存binding.node
Caching binary to C:UsersleepiAppDataRoaming
pm-cache
ode-sass4.13.0win32-x64-64_binding.node

> node-sass@4.13.0 postinstall D:demo
ode_modules
ode-sass
> node scripts/build.js

Binary found at D:demo
ode_modules
ode-sassvendorwin32-x64-64inding.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。

我的问题是npm无法从github网页上自行下载binding.node
解决方法:(这里的下载网址注意一下版本号)

  1. 先到网页 https://github.com/sass/node-sass/releases/download/v4.12.0/win32-x64-64_binding.node 自行下载binding.node
  2. 把binding.node放在全局node_cache中(我的路径是D:AppDataNodejs ode_cache,默认路径是C:UsersxymAppDataRoaming pm-cache)
  3. 然后针对版本安装
npm install --save-dev node-sass@4.12.0
  1. 解决。
原文地址:https://www.cnblogs.com/xym4869/p/13265533.html