Nodejs在Mac M1/M2芯片上安装与前端开发环境搭建

4,951 阅读2分钟

Mac M1/M2芯片的本在运行JavaScript这类代码时有性能优势。不过基于指令集的不同,M1/M2芯片的本在安装Nodejs等前端开发环境搭建时需要进行各类兼容性处理。

--------最近很忙,文章鸽了很久,重新更新一下吧--------

1. 背景

如果您正在使用MacBook,且使用Apple M1/M2芯片,恭喜你,这篇文章与您有缘。如果您使用Intel芯片或者是windows,那客官留个赞再走?

言归正传,由于Apple M1/M2系列芯片基于ARM架构,而之前Intel芯片基于x86架构,两者指令集有一定差别,导致操作系统的环境/API均有差异。所以运行在x86架构的操作系统上的软件,如果想运行在ARM架构的操作系统上,要么软件原生做兼容,要么在操作系统层面提供一些兼容的办法。

Apple提供的解决方案是后者,当然nodejs在14.0版本及之后也做了原生对Apple M1/M2芯片的兼容。所以本篇文章限定的背景是:使用MacBook,且CPU是Apple M1/M2系列芯片,需要安装nodejs (version < 14.0,如nodejs v10.18.0、nodejs v12.14.0)以及不论哪个版本nodejs,需要在本地build Docker 的情况。

PS:如何看自己的本用什么芯片?桌面左上角 --> 关于本机。

2. 前期准备

  • 能够科学上网的网络环境,起码能保证:nodejs官网(nodejs.org/en/ ),npm(www.npmjs.com/ ),github(github.com/ )上述三个网站均能正常访问。
  • 你的MacBook。

3. 安装低版本nodejs

本文如无特殊声明,均是基于zsh。

首先,执行

$ nvm install 10.18.0

你能够正常安装nodejs v10.18,但是可能无法执行

$ nvm use 10.18.0

参照下述方法(方法一与方法二执行一个即可,不能都执行)

方法一

  1. 卸载所有版本nodejs
$ nvm ls

$ nvm uninstall <version>  # <version>替换成要卸载的版本
  1. 删除nvm
$ nvm unload
  1. 终端执行
$ arch -x86_64 zsh # 注意 执行此命令后,环境相当于变成shell,很多依赖此时都丢失,可能需要重新安装报错缺少的依赖。
  1. 重启终端
  2. 重新安装nvm,建议直接从github下载,再添加环境变量
$ git clone https://github.com/nvm-sh/nvm.git
$ cd nvm   # 进入nvm目录
$ ./install.sh  # 等待执行成功
$ vi ~/.bash_profile

在~/.bash_profile添加

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm

[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

在~/.zshrc找到 # User [configuration]部分,在下一行添加source ~/.bash_profile,之后保存退出此文档。

  1. 能够正常使用nvm安装下载低版本nodejs。

方法二

  1. Finder --> 应用程序 --> 找到终端图标 --> 右键显示简介
  2. 勾选使用Rosetta打开,重启终端。
Snipaste_2023-03-14_16-05-21.png

4. 本地Docker构建镜像,但推送到x86芯片的服务器无法运行

$ docker buildx build --platform linux/amd64  # 明确指定运行平台,否则Docker会按照运行在M1芯片环境打包