npm run serve起项目报错node-sass not find

node-sass是开发中比较常见的依赖包,也是最常见见到的报错之一。
由于node-sass与别的依赖包不一样。而node-sass安装失败的原因很多,趟坑时间比较久,查阅资料也有点多。终于知其然知其所以然
我们先看看node-sass的安装原理吧。

PS F:\demo> npm i node-sass// 从npm源安装到node_modules
> node-sass@4.13.0 install F:\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 F:\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 F:\demo\node_modules\node-sass
> node scripts/build.jsBinary found at F:\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.若未安装,则从gitHub上下载node-sass本体;
3.检查全局缓存和本地是否有对应的.node文件,有则跳过;
4.若没有则下载该二进制文件,并缓存至全局;
5.若下载失败,则本地尝试编译该文件;
6.将版本信息写到package-lock.json文件中

由此能看到,node-sass实际上是依赖于一个二进制文件binding.node文件,从npm源安装完本体后,还会从github下载对应版本的binding.node文件。

因此安装node-sass失败的原因有以下几点:
(额外说明:由于本地一开始的node版本是10.15.3,对应的binding.node是win32-x64-64_binding.node,该版本不存在。这个问题导致我一直在坑中爬不起来,怎么都装不上。。。)

1.node与node-sass版本不一致

众所周知,node-sass的兼容性并不是很友好,node与node-sass有着对应版本的关系;

NodeJs Mini node-sass version node Modules
Node 13 4.13+ 79
Node 12 4.12+ 72
Node 11 4.10+ 67
Node 10 4.9+ 64
Node 8 4.53+ 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的版本即可。(此坑万万没想到啊)

2.缓存中的binding.node版本不一致

此坑也踩了。。。一开始想着省时间,去copy了别人能正常启动项目的node-sass,node install能正常编译了,但是在执行 npm run serve时依旧会报 not found node-sass。

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

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

3.npm源速度慢

众所周知,国内用npm下载速度比较慢,一般会设置淘宝镜像等类似代理。

npm config set registry https://registry.npm.taobao.org

或者通过.npmrc文件设置:

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

4.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/

5.安装失败后重新安装

安装失败后需要重新安装,重新安装前需要下载之前下载的node-sass,执行 npm uninstall node-sassnpm uninstall node-sass -D命令进行删除,也可以直接删除项目文件目录,该方法简单粗暴,若没有权限则只能使用命令进行删除。

6.完全离线的情况下安装node-sass(此项目中遇到的)

有些公司的开发环境是用公司内网,而公司内网一般是不能连外网的,此时需要进行离线安装node-sass。
1.提前从gitHub https://github.com/sass/node-sass/releases/ 下载好与自己node版本相对应的binding.node文件备用;
2.执行以下命令:($filepath是本地存储binding.node文件的目录,反斜杆需要修改成’/’

// 1.设置环境变量,使得binding.node文件直接从本地取
npm set SASS_BINARY_PATH=$filepath
// 2.查看设置的环境变量是否成功
echo %SASS_BINARY_PATH%
// 如果设置成功,返回的是文件的路径,如果不是则设置失败
// 3.执行安装node-sass命令
npm install node-sass

7.提示没有安装python、build失败等

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

至此踩坑半个月结束。1


  1. 本文参考https://segmentfault.com/a/1190000020993365,感谢此文作者。 ↩︎

npm run serve起项目报错node-sass not find相关推荐

  1. Vue:npm run serve运行项目时报了一个ValidationError:CopyPliugin Invalid Options的错误

    Vue:npm run serve 运行项目时报了一个ValidationError:CopyPliugin Invalid Options的错误,原因是options应该为数组类型,可是找了半天没找 ...

  2. 执行npm run build的时候报错怎么办?

    执行npm run build的时候报错怎么办? [webpack-cli] Invalid configuration object. Webpack has been initialized us ...

  3. vue项目执行命令npm run serve运行项目时 停在 98% after emitting CopyPlugin

    问题描述 启动vue项目执行命令:npm run serve.控制台一直停留在'98% after emitting CopyPlugin' 问题解决 对问题进行排查后发现是项目中使用require( ...

  4. idea npm start启动前端项目报错:ERROR Failed to compile with 1 errors : This dependency was not found:

    一.错误信息 二.解决方案: 如图所示 找不到依赖,执行命令:npm install --save Vuex(Vuex为具体依赖,错误日志最后一行有打印,首字母大写添加失败,可改为小写重试) 报错40 ...

  5. vue打包npm run build时候界面报错

    用coding-pages打开后显示Failed to load resource: the server responded with a status of 404 (Not Found), 解决 ...

  6. JS stacktrace--解决运行npm run serve 后报错,node内存溢出问题

    电脑系统:MAC M1 拉取vue项目,运行npm run serve 后,报错如下 <--- JS stacktrace --->==== JS stack trace ======== ...

  7. 启动vue项目报错faield at the vue-cli-service serve

    解决方法: 把node_modules文件夹删掉, 运行npm install 再运行npm run dev 如果还是报错就是nodejs的版本的太低了,换高一点的版本就可以了

  8. VUE 启动项目报错

    因任务需求需要将原来的代码,复制一份改变端口号来和后端代码实现新需求,再将代码复制后,使用npm run dev启动项目报错了,npm  install也不行.在网上搜了各种方法都不行,头大,简直是个 ...

  9. vue 启动项目报错 npm run serve

    安装了一个vue-element admin,习惯性输入,然后报错. npm run serve npm ERR! missing script: servenpm ERR! A complete l ...

最新文章

  1. 能用条件注释改善的IE兼容问题
  2. JavaScript 技术篇-chrome浏览器读取剪切板命令document.execCommand(‘paste‘)返回false原因及解决方法
  3. OpenGL perpixelgloss逐像素光泽度的实例
  4. 开发人员的新分布式基元
  5. VS中代码格式及样式的统一处理
  6. oracle 截取字符(substr),检索字符位置(instr)
  7. virtual关键字的使用(C# 参考)
  8. php调用拼多多的接口
  9. 20170825阿里在线笔试之菜鸟仓库货架格子编号
  10. Debian系统apt-get build-dep命令
  11. BZOJ3495 : PA2010 Riddle
  12. js不同地图坐标系经纬度转换(同一经纬度,硬件/谷歌转高德地图;经纬度查询)
  13. Vue 关闭浏览器清除Cookies
  14. html屏幕遮挡,遮挡屏幕怎么设置 为什么手机上会出现请勿遮挡屏幕顶端
  15. 微软远程桌面(安卓版)连接出现0x204错误的解决办法
  16. 年仅19岁!西班牙最危险黑客被捕
  17. 想进大厂, Jira 管理平台你会用么?
  18. Problem : 算式等式
  19. 《软件过程管理》 第九章 软件过程的评估和改进
  20. COI实验室技能:python控制相机的方法——采集、处理、显示、实时

热门文章

  1. Opencv-python生成幻影坦克
  2. 数据挖掘——文本挖掘-关键字提取
  3. github的ip地址经常变,可以在这里查询
  4. 经典Java面试题(第1季)
  5. 扩展坞连接电脑没有反应的处理方法
  6. [计算机基础]整理计算机的数据计量单位
  7. 使用Graphviz下的dot工具绘制图像
  8. 忘记了word文件打开密码
  9. PHP主要是写什么 php文件怎么打开
  10. php打开工具,php文件用什么软件打开