Typography

四畳半のへや

解决 nvm 无法在 arm 架构下安装 V15 以下的 node 版本 的问题

发布于 # 疑难杂症

迫于需要维护公司一个比较老的项目,所以在配置 macOS 环境的时候选择了使用 nvm 来管理多个 node,但是遇到了一些问题。

根据 nvm 官方文档的说法:

January 2021: there are no pre-compiled NodeJS binaries for versions prior to 15.x for Apple’s new M1 chip (arm64 architecture).

也就是说 M1 芯片( arm64 )现在并没有对应的预编译版本,所以安装之后需要进行编译。而在编译过程中会遇到一些问题:

  • 编译成功,但是因为内存不足而崩溃( crashes ),增加足够的 node 内存后再次尝试但依然提示内存不足;
  • 直接编译失败。

这里我遇到的是第二种情况,也就是直接编译失败。那么如何解决这个问题呢, nvm 其实在文档里给出了一个方案,这个方案有两个前提:

  • 使用 zsh
  • 已经安装好 Rosetta 2 macOS 应该在 macOS X 上的默认终端就已经是 zsh 了,而 Rosetta 2 如果在你第一次打开因特尔架构的软件时就已经安装过了,如果没有安装过也可以手动进行安装:
softwareupdate --install-rosetta

以上两个条件都满足之后我们就可以处理这个问题了。

  1. 首先检查自己的 node 架构,返回的结果应该是 arm64,这个是 M1 芯片的架构,也就是我们问题的元凶
node -p process.arch

# arm64
  1. 在 64 位 x86 架构下启动一个新的 zsh 进程;
arch -x86_64 zsh
  1. 下载你需要的 node 版本,这个 node 将会是 x86 架构的;
nvm install node
  1. 现在检查一下架构是否正确;
node -p process.arch

# x64
  1. 退出这个进程。
exit

到这里我们就成功的安装好了一个低版本的 node。