对于M1芯片的Mac在安装NVM,并用nvm下载不同的node版本的时候遇到的坑

5,496 阅读1分钟

截屏2021-08-31 下午7.51.37.png 在开发过程中,经常会遇到node版本太高的问题,所以就想安装低版本的Node,然后就开启下载node旅程。

-下载安装nvm

先是查看自己是否有nvm,有的话就好办了,直接用nvm install 版本号就好了。如果没有的话就去官网上找到下面的命令执行。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

如果在安装nvm的时候报错,可以根目录~下的.zshrc或者.bash_profile其中一个文件配置

(1)比如打开shell
(2)执行 vim .bash_profile
(3)i
(4)然后复制粘贴下方的配置,esc -> :wq!

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" 

(5)source .bash_profile 使其生效
(6)重新下载nvm

下载完nvm之后,我就赶紧安装Node

可是事情并没我想的那么简单。经过无数次尝试nvm install 版本号,一直报错。绝望了~~~

后来通过nvm官网才知道,M1芯片的系统,node版本在小于15.* 以下的都安装不了,因为arm 64架构下是没有预编译 NodeJS 二进制文件的。

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

使用nvm下载node,虽然c++编译成功,但是还是会报内存不足错误。

  • using nvm to install, say, v14.15.4:
  • the C code compiles successfully
  • but crashes with an out of memory error when used
  • increasing the memory available to node still produces the out of memory errors:
  • when using nvm to install some versions, the compilation fails

-解决办法

根据官网可知他的解决办法是 将 shell 的体系结构从 arm64 更改为 x86。

#查看Node版本
$ node --version
v14.15.4
#检查“节点”二进制文件的体系结构
$ node -p process.arch
arm64
#这证实了arch是针对M1芯片的,这是导致问题的原因。
#所以我们需要卸载它。
#无法卸载当前使用的版本,请切换到其他版本:
$ nvm install v12.20.1
#现在卸载要替换的版本:
$ nvm uninstall v14.15.4
#在64位X86体系结构下启动新的zsh进程:
$ arch -x86_64 zsh
#使用nvm安装节点,这将下载预编译的x64二进制文件:
$ nvm install v14.15.4
#现在检查架构是否正确:
$ node -p process.arch
x64
# 现在可以安全地返回到arm64 zsh进程:
$ exit
# 我们回到了本机shell:
$ arch
arm64
# 新版本现在可供使用:
$ nvm use v14.15.4
Now using node v14.15.4 (npm v6.14.10)

-设置默认版本

通过以上方式安装nvm后,切换好node版本,但是每次打开vscode后,版本号会变掉,这个时候可以设置默认版本

nvm alias default version