项目执行 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

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专