M1 Mac安装低版本Node.js

M1 Mac安装低版本Node.js

💡 原文中文,约900字,阅读约需3分钟。
📝

内容提要

M1 Mac上安装低版本Node.js时,原生支持最低版本为16,更早版本需通过Rosetta 2转译运行。以asdf-vm为例,先安装Rosetta 2,再用`arch -x86_64 asdf install`命令安装Node.js 14。若遇错误,可启动Rosetta 2 shell后执行安装。

🔎

延伸解读

为什么需要Rosetta 2

M1芯片采用ARM架构,而早期Node.js版本是为x86架构编译的,无法直接在M1上原生运行。Rosetta 2是苹果提供的转译层,能将x86指令翻译为ARM指令,从而让这些旧版本在M1上运行。但转译会带来性能损耗,且某些依赖原生模块可能不兼容,因此建议仅在必要时使用旧版本。

asdf与nvm的差异

文章以asdf-vm为例,但提到nvm同理。asdf是一个多语言版本管理器,通过插件管理Node.js,而nvm是专门的Node版本管理器。两者在安装低版本时都需要借助Rosetta 2,但命令略有不同。asdf使用`arch -x86_64 asdf install`,而nvm可能需要类似`arch -x86_64 nvm install`。选择哪个取决于你的工作流。

安装失败的常见原因

执行`arch -x86_64 asdf install`时可能遇到`Bad CPU type in executable`错误,这通常是因为asdf命令本身是ARM版本,无法在x86转译下运行。解决方法是用Rosetta 2启动一个全新的shell(如`env arch -x86_64 zsh --login`),确保所有命令都在转译环境中执行。这能避免因命令架构不匹配导致的失败。

Q&A

M1 Mac上能原生运行的最低Node.js版本是多少?

M1 Mac上能原生运行的最低Node.js版本是16。

如何在M1 Mac上安装Node.js 14?

以asdf-vm为例,先安装Rosetta 2,然后使用`arch -x86_64 asdf install nodejs 14.17.6`命令安装,安装后可用`node -e 'console.log(process.arch)'`验证架构。

M1 Mac上安装低版本Node.js时,Rosetta 2的作用是什么?

Rosetta 2用于转译运行,使原本不支持M1芯片的旧版本Node.js(如14)能够在M1 Mac上运行。

在M1 Mac上使用asdf安装Node.js 14时,如何指定使用Rosetta 2转译?

使用`arch -x86_64 asdf install nodejs 14.17.6`命令,其中`arch -x86_64`会强制以x86_64架构运行asdf命令,从而通过Rosetta 2转译。

安装Node.js 14时遇到'Bad CPU type in executable'错误怎么办?

可以尝试用Rosetta 2启动一个新shell,执行`env arch -x86_64 zsh --login`,然后在新shell中直接运行`asdf install nodejs 14.17.6`。

如何验证M1 Mac上安装的Node.js是否通过Rosetta 2运行?

运行`node -e 'console.log(process.arch)'`,如果输出为`x64`,则说明Node.js是通过Rosetta 2转译运行的。

🏷️

标签

➡️

继续阅读