项目执行 npm install
或 yarn
的时候经常遇到 node-sass
下载错误, sass_binary 无法下载,或者提示让你安装 python
( 安装python这个提示有点扯, 严重误导人, 以下详述 ),还有很多其他千奇百怪的说法,照着试了一大堆之后发现一个有用的都没有。
对于 node-sass
,如果通过以下设置已经解决了问题,那基本上能判断出来是网络原因了。但后面的内容我仍然建议你看一看。
set SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ && npm install node-sass
如果这种办法尝试几次还不行, 基本可以排除网络原因了, 可能是你所使用 node-sass
依赖的版本跟电脑上安装的 node.js 版本不对应导致的.
因为项目所需要的 sass_binary
的版本是由 node
的版本和项目中依赖的 node-sass
版本共同决定的。然而有时候错误的版本并没有与之对应的 sass_binary
文件,那么解决问题的关键就在于选对 node
和 node-sass
的版本。
怎么确定项目所需的 sass_binary
的版本呢?
首先通过 node -v
查看电脑中已安装 node
的版本,然后在 https://nodejs.org/zh-cn/download/releases/ 页面的表格中找到这个版本的 node
,在 NODE_MODULE_VERSION
这一列中指定了该版本 node
对应的 node-sass
的 SASS_BINARY
版本。
举例来说,假设电脑中安装的 node 版本号是 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(其它操作系统同理),
然后通过 https://npm.taobao.org/mirrors/node-sass 找到对应的 node-sass 版本,进入文件夹内查找 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 官网升级版本, 升级的还不是长期支持版本, 而是最新发布版本 (以前的自己是多么的无知). 如此导致的问题就是每次启动项目的时候报一大堆错误然后启动失败, 而且网上还找不到靠谱的答案.
至于 python 的提示,其实都是同一个问题,只要找到了有效的 binding 文件,这个问题也就随之解决了。很多人看见 python 的提示就去百度,按照网上说的方法下载 python,然后配置环境变量, 往往按照步骤操作到一半时忍无可仍最终放弃, 继而再去找别的方法. 其实根本就不是这个原因,最根本的问题是解决依赖的版本,而不是去搞 python。我们只是在开发一个web项目,怎么还跟 python 扯上关系了,看到这种回答我就越想越奇怪?回想一下以前能正常运行的时候,我们的电脑上也并未安装过python,更没有配置python环境的过程,这根本说不过去啊, 可能这也是我每次按照步骤配置python到一半就选择放弃的原因吧。说到底,要多思考, 不要人云亦云, 要搞清楚问题的根源,这样才能少走很多弯路。
原文链接:https://blog.csdn.net/baobao_123456789/article/details/116047109
评论