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

相关文章

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

python 喷泉码

因为要完成毕业设计,毕业设计做的是数据分发与传输的东西。在网络中数据容易丢失,所以我用fountain code做所发送数据包的数据恢复。fountain code属于有限域编码的一部分,有很广泛的应用。 我们日常生活中使用的二维码,就用到foutain code做数据恢复。你遮住二维码的四分之一,用手机的相机也照样能识别。你遮住的四分之一就相当于丢失的数据包。 为了实现并理解foutain