macOS 12 安装卸载升级 Node.js

安装 Node.js

使用 Homebrew 安装

搜索 Homebrew 支持的 Node.js 软件包方案:

brew search node
libbitcoin-node node node@14 node@20 ✔ nodeenv
linode-cli node-build node@16 node_exporter nodenv
llnode node-sass node@18 ✔ nodebrew ode

推荐安装最新的 LTS 版本,即 node@20

brew install node@20

安装 openssl@3 失败

在旧版的 Intel 芯片 macOS 系统上面安装 openssl@3 失败:

错误信息显示在执行 test 时失败,可以手动安装对应版本的 openssl@3 (这里是 3.5.0)不执行 test 命令,之后再重新使用 Homebrew 安装 node@20

使用 Homebrew 查看 openssl@3 的依赖项:

brew deps --tree openssl@3
openssl@3
└── ca-certificates

使用 Homebrew 安装 openssl@3 的依赖:

brew install --only-dependencies openssl@3

下载对应版本的 openssl@3 安装包:

curl -O -L https://www.openssl.org/source/openssl-3.5.0.tar.gz

解压下载好的软件包:

tar xzfv openssl-3.5.0.tar.gz

进入到解压后的目录:

cd openssl-3.5.0

编译配置:

perl ./configure \
  --prefix=/usr/local/Cellar/openssl@3/3.5.0 \
  --openssldir=/usr/local/etc/openssl@3 \
  --libdir=lib \
  no-ssl3 \
  no-ssl3-method \
  no-zlib \
  darwin64-x86_64-cc \
  enable-ec_nistp_64_gcc_128

启动最大核心编译:

make -j$(sysctl -n hw.ncpu)

安装:

make install MANDIR=/usr/local/Cellar/openssl@3/3.5.0/share/man MANSUFFIX=ssl

防止 Homebrew 在更新 openssl@3 时删除 certsprivate 目录:

mkdir -p /usr/local/etc/openssl@3/certs
mkdir -p /usr/local/etc/openssl@3/private
touch /usr/local/etc/openssl@3/certs/.keepme
touch /usr/local/etc/openssl@3/private/.keepme

ca-certificates 中提供的 CA 证书连接到 openssl@3

rm -rf /usr/local/etc/openssl@3/cert.pem
ln -sf /usr/local/etc/ca-certificates/cert.pem /usr/local/etc/openssl@3/cert.pem

删除安装包和安装目录:

cd ../
rm -rf openssl-3.5.0.tar.gz
rm -rf openssl-3.5.0

查看 macOS 内置的 openssl 命令路径:

which -a openssl
/usr/bin/openssl

查看 macOS 内置的 openssl 版本:

openssl version
LibreSSL 2.8.3

用 Homebrew 建立 openssl@3 的符号链接:

brew link openssl@3

再次查看 openssl 的命令路径:

which -a openssl
/usr/local/bin/openssl
/usr/bin/openssl

可见多了一个刚刚建立的命令路径 /usr/local/bin/openssl 并且在 macOS 内置的 openssl 之前。

重启 Terminal 或者打开新的 tab 确认新安装的版本:

openssl version
OpenSSL 3.5.0 8 Apr 2025 (Library: OpenSSL 3.5.0 8 Apr 2025)

配置环境变量

添加 Node.js 相关环境变量到 Zsh 配置文件 ~/.zshrc 中,并重新执行配置文件:

echo 'export PATH="/usr/local/opt/node@20/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
echo 'export LDFLAGS="-L/usr/local/opt/node@20/lib"' >> ~/.zshrc
source ~/.zshrc
echo 'export CPPFLAGS="-I/usr/local/opt/node@20/include"' >> ~/.zshrc
source ~/.zshrc

查看安装的 Node.js 版本号:

node -v
v20.19.0

卸载 Node.js

卸载软件包

使用 Homebrew 卸载 Node.js:

brew uninstall node@20

默认不会卸载依赖,需要手动卸载:

# 查看孤立依赖
brew autoremove --dry-run

# 卸载孤立依赖
brew autoremove

删除环境变量

进入 Zsh 配置文件:

vim ~/.zshrc

找到并删除以下环境变量配置:

export PATH="/usr/local/opt/node@20/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/node@20/lib"
export CPPFLAGS="-I/usr/local/opt/node@20/include"

升级 Node.js

兼容升级

查看当前已安装的所有软件包方案:

brew ls
icu4c node@10

可见当前安装的 Node.js 软件包方案为 node@10

兼容升级(第二、三位版本号):

brew upgrade node@10

不兼容升级

先卸载已安装的 Node.js 软件包方案,再安装新的方案。

参考文献