最近更换macOS系统,pull项目后安装依赖时报错:
Error: Can't find Python executable "python", you can set the PYTHON env var
index.js:1 Uncaught Error: Module build failed: Error: ENOENT: no such file
参考 M1芯片 安装node-sass报错 这篇文章后 ,得知原因是:node与node-sass版本不匹配。代码的node-sass是v4.14.1版本(需要node15以下的版本),而我的node 是 v14(但M1芯片仅兼容node v15.3.0 以上,因为低版本的 node 并不是基于 arm64 架构的)。
#通过命令可以让 shell 运行在Rosetta2下
arch -x86_64 zsh
安装低版本 Node
nvm install v12
然后用cnpm 单独安装[email protected]版本,此时依赖下载报错已经解决。
如果项目启动时报错:
Syntax Error: Error: Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64) with Node.js 14.x
此错误表示Node Sass不支持您的环境的体系结构(arm64),即Node.js版本14.X的OS X。切换到低版本的Node.js(12.x)时也能解决以上报错问题。
经查阅资料,除上面方案外,还可以通过其它体系结构来编译node-sass ,解决不兼容问题。
但此方案需要扩展额外的解释器工具而且使用相对麻烦,不建议采用;这里我只做简单的使用介绍(ps: 该方案我没做验证)。
该方案涉及到gcc、llvm 和 clang编译器的知识,具体可以看看这篇文章:详解三大编译器:gcc、llvm 和 clang
具体操作:
在终端通过以下指令来使用不同的架构(例如x86-64):
llvm-gcc -march=x86-64 -mcpu=sandybridge yourfile.c -o yourfile
clang -march=x86-64 -mcpu=sandybridge yourfile.c -o yourfile
这两条指令用于编译您的程序。具体来说,他们指定了编译器要使用沙河桥(Sandy Bridge)架构提供x86-64指令集编译您的程序,以便在x86-64架构的处理器上运行。
上面的指令将编译文件“yourfile.c”,并将其命名为“yourfile”。 -march参数指定了机器架构,而-mcpu参数指定了架构的实际处理器指令集(在这种情况下是沙河桥)。
您也可以使用替代语句,例如“gcc”或“clang”,而不是上面提到的“llvm-gcc”或“clang”,以使用标准GCC或Clang编译器编译程序。
安装使用流程如下:
在终端中输入brew install gcc,开始安装gcc包。
输入brew link --overwrite gcc,完成gcc安装和链接。
要使用GCC,可以在终端中输入gcc –v,获取GCC版本信息,或者输入gcc myfile.c –o myfile,编译myfile.c文件,生成myfile文件。
使用GCC编译器编译 Node Sass的指令示例:
gcc ./node-sass.c -o node-sass
在下载gcc时可能会耗时很久,因为会同步下载相关的依赖包,我最后下载失败了, 报错如下:
Error: gcc: Failed to download resource "gcc"
Download failed: https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:d0dd262f7d681d5bbcc39bea85d0dd355f2f962060afe4de16432fbe9596bf8c
然后又修改brew源地址 继续下,
git -C “$(brew --repo)” remote set-url origin [源地址]
#默认下载地址
https://mirrors.ustc.edu.cn/brew.git
#腾讯云下载地址
https://mirrors.cloud.tencent.com/homebrew/brew.git
#华为云下载地址
https://mirrors.huaweicloud.com/homebrew/brew.git
漫长的等待后,gcc和llvm编译器依然下载失败。。。