项目执行 npm install (yarn)的时候报 node-sass 错误、python 错误?彻底搞清楚原因,让你百试不爽,完全不用那么麻烦。

本文主要是介绍项目执行 npm install (yarn)的时候报 node-sass 错误、python 错误?彻底搞清楚原因,让你百试不爽,完全不用那么麻烦。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目执行 npm install 或 yarn 的时候经常遇到 node-sass下载错误,sass_binary 无法下载,或者让你安装 python (安装 python 这个提示严重误导人,其实根本不是这个原因,后面详述)的提示。网上教你怎么做的文章不计其数,然而照着操作了半天发现一点用都没有。

对于node-sass,如果通过以下方式手动指定国内npm镜像设置后能够解决问题,那基本可以断定是你网络的原因。但本文的目的旨在尝试解释清楚为什么会产生以上错误,题主认为仍然值得一看。

set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ && npm install node-sass

☝ 如果指定国内 npm 镜像尝试几次后还是不行,不要继续纠结,大概率原因是你项目中引用的 node-sass 依赖的版本跟电脑上安装的 node.js 版本不对应。

因为项目所需要的一个文件 sass_binary 的版本是由本机已安装 node 的版本号和项目引入的 node-sass 版本号共同决定的,在 windows-x64 位平台系统中这个文件的名称为 win32-x64-??_binding.node,?? 是后文中提到的 NODE_MODULE_VERSION。然而有时候错误的 node-sass 版本并没有与之对应的 sass_binary 文件,那么解决问题的关键就在于选对 node 和 node-sass 的版本

怎么确定项目所需的 sass_binary 的版本呢?

首先通过 node -v 命令查看电脑中已安装 node 的版本,然后打开 以往的版本 | Node.js 页面,在表格中找到对应的 node 版本,在 NODE_MODULE_VERSION 这一列中指定了此版本 node 对应的 node-sass 的 SASS_BINARY 版本。

举个🌰,我电脑中安装的 nodejs 是 v14.15.4,它对应的 NODE_MODULE_VERSION 是 83,

接着查看项目中的 package.js 和 yarn.lock (如果有)找到所引用 node-sass 的版本,我的项目中使用的 node-sass 版本是 v4.13.0,至此我们就能得出此项目所需要的 sass_binary 文件是 node-sass@v4.13.0 版本(注意此处,不是任意版本哟)中的 win32-x64-83_binding.node(其它平台电脑系统同理)。

然后通过 Releases · sass/node-sass · GitHub 页面(政策所限,可能需要梯子)找到对应的 node-sass 版本,展开 Assets 列表,在列表中查找 win32-x64-83_binding.node,发现此文件并不存在,我们看到在 node-sass@v4.13.0 中按顺序排下来最大的 binding 文件版本才到 79,这就已经破案了,这才是在执行 npm Install 时报错的根本原因:项目试图使用一个不存在的文件

那如何解决呢?其实前文已经讲的很清楚了,按照原理倒推回去即可!

这时候就需要修改 node-sass 依赖的版本号了,原则是在不跨越大版本的前提下,我们优先在最接近当前所使用的 node-sass 更新的版本中查找有没有这个 binding 文件,如果有,那么就优先使用这个版本即可 ( 步子迈太大怕扯到蛋 ) ,如果还没有,那就继续往后找。比如我一直到 node-sass@v4.14.0 才找到有对应的 win32-x64-83_binding.node 文件,那么我们就在项目中重新安装使用这个版本的 node-sass 即可。

需要注意的是项目移除旧版本依赖和安装新版本依赖最好是通过命令操作,否则在使用 yarn.lock 锁定了项目依赖版本的情况下可能无法正常更新版本。 如果在安装过程中仍然报错,那就先把之前的 node_modules 文件夹整个删掉再重新安装一次。至此,我们的项目应该就可以正常安装依赖并启动了。

补充:

截止发文时我们看到官网中公布的 "当前发布版" nodejs 是 v16.0.0,再通过之前的链接查询发现,此版本 nodejs 对应的 NODE_MODULE_VERSION 版本都™到 93

我们再到 GayHub 看看,此时 node-sass 最后一个 release 版本是 5.0.0,下方的版本日志清楚地写着支持的 node 版本为 10、12、14、15,nodejs v16 并未在列,而且在 Assets 中也没有找到有对应的 win32-x64-93_binding.node 文件(这就是你使用 node 当前发布版的后果,所以非必要情况下不要随意升级电脑中的 nodejs,也不建议使用当前发布版,因为版本太新很多东西暂未适配。就算升级也要使用长期支持版)(至此我们也可以猜测一下为什么提示让安装 python?莫非是想要让我们自己来编译生成所需要的 binding.node 文件?未作相关了解,有兴趣的可以在评论区交流)

现在我们知道了,更高版本的 nodejs 需要更高版本的 node-sass,因此更新了 nodejs 之后可能不再与项目中的旧版本的 node-sass 兼容,这时候还要升级所有不兼容的 node-sass,要么就尽量不要手欠随意升级电脑上的 nodejs 的版本,以免导致不必要的麻烦。以前我就是这样,每次闲的蛋疼的时候就去 nodejs 官网升级版本,升级的还是最新发布版 (以前的自己是多么的无知)。如此导致的问题就是启动项目时报一大堆错误然后启动失败,而且网上还找不到靠谱的解决方法。后来痛定思痛,遂下定决心一探究竟,百度不行就 google,并经过多次验证可行后,最终总结出这篇文章,以便之后查阅,同时分享出来,希望对他人有所帮助。

至于 python 的提示,其实都是同一个问题,只要找到了有效的 binding 文件,这个问题也就随之解决了。很多人看见 python 的提示就去下载 python,然后配置环境变量,往往按照步骤操作到一半时忍无可忍最终放弃,继而再去找别的方法。我们只是在开发一个 web 项目,怎么还跟 python 扯上关系了,每次看到这种回答我就一阵狐疑。回想一下之前在开发时我的电脑上从来没安装过python,更没有配置 python 环境的过程,且我的项目也顺利开发结束了,这根本就说不通啊。可能这也是我存疑的原因吧。说到底,要多思考,善于从诸多“教程”中过滤出有效信息,不要人云亦云,要搞清楚问题的根源,这样才能避免浪费时间。

知其然知其所以然。

这篇关于项目执行 npm install (yarn)的时候报 node-sass 错误、python 错误?彻底搞清楚原因,让你百试不爽,完全不用那么麻烦。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736895

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解