likes
comments
collection
share

M1 macbook 使用nvm安装旧版本node踩坑

作者站长头像
站长
· 阅读数 57

nvm安装

官方提供的安装命令是:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

我在安装之前看了网上的反馈,普遍说使用此方法安装,nvm的相关环境变量(也就是下面几行)信息会被写入.bash_profile

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

因为macos的默认shell是zsh,最终导致每次启动shell不能加载nvm命令。

怀疑跟最后的bash命令有关?决定手动安装:

# 手动下载install.sh脚本
curl -O https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh

# 赋予执行权限
chmod +x install.sh

# 执行安装
./install.sh

安装完成后,上面几行环境变量被正确写入.zshrc中,重启终端后即可使用nvm命令。

安装node

看了一下官方文档,直接使用nvm install $version即可安装对应版本的node

安装最新版本

先安装一个最新版本:

# node是最新版本的alias
nvm install node

一切正常,看下载的文件名是arm64的版本

安装v14旧版本

公司服务器使用的是v14.17.0,去node.js官网看了版本发布日期在2021年5月,按理说应该支持m1了。

➜  nodetest nvm install 14.17.0
Downloading and installing node v14.17.0...
Local cache found: ${NVM_DIR}/.cache/bin/node-v14.17.0-darwin-x64/node-v14.17.0-darwin-x64.tar.xz
Checksums match! Using existing downloaded archive ${NVM_DIR}/.cache/bin/node-v14.17.0-darwin-x64/node-v14.17.0-darwin-x64.tar.xz
Now using node v14.17.0 (npm v6.14.13)

从执行下载的文件名node-v14.17.0-darwin-x64.tar.xz可以看出,使用nvm安装v14时,默认安装的是x64版本,不是arm版本。(缓存信息请忽略,因为我之前跑过一遍了)

根据node官方示例,服务倒是能正常启动,就是心里有点不爽,想要使用原生arm版本。

从源码编译安装arm64原生版本

经过查看nvm官方文档和一些node版本相关的信息:

  1. node在v15以前的版本不提供mac arm64架构的二进制预编译包
  2. nvm install会默认拉取预编译包

所以默认安装的v14是x64版本。

解决办法nvm也给出了,安装时可以使用-s选项强制从源码安装。

实操一下:

➜  nodetest nvm install -s 14.17.0
Detected that you have 8 CPU core(s)
Running with 7 threads to speed up the build
Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!
Downloading https://nodejs.org/dist/v14.17.0/node-v14.17.0.tar.xz...
############################################## 100.0%
Computing checksum with shasum -a 256
Checksums matched!
$>./configure --prefix=/Users/cogear/.nvm/versions/node/v14.17.0 <

...

可以看到果然从源码编译了。

自测一下

安装完成后,测试一下:

➜  nodetest nvm current
v14.17.0
➜  nodetest nvm alias work 14.17.0 # 顺便给常用的版本设置一个别名
work -> 14.17.0 (-> v14.17.0)
➜  nodetest node app.js 
Server running at http://127.0.0.1:3000/

到活动监视器检查一下node进程:

M1 macbook 使用nvm安装旧版本node踩坑 可以看到node是原生的arm进程。

转载自:https://juejin.cn/post/7057451578176831495
评论
请登录