项目执行 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 环境的过程,且我的项目也顺利开发结束了,这根本就说不通啊。可能这也是我存疑的原因吧。说到底,要多思考,善于从诸多“教程”中过滤出有效信息,不要人云亦云,要搞清楚问题的根源,这样才能避免浪费时间。

知其然知其所以然。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值