项目执行 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脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一