问题概述:当现代硬件遇见旧版软件
刚从Windows切换到全新的MacBook Pro(M4芯片),准备投入到熟悉的老项目维护中,一切似乎都很顺利——直到我需要运行那个依赖Node.js 14的项目。
在终端中输入 nvm install 14 后,等待我的不是成功的提示,而是一连串令人困惑的错误信息:
为什么安装会失败?
- 架构差异的本质
- Node.js 14官方预编译包主要针对x86_64架构
- M4芯片的ARM架构需要对应的ARM原生二进制文件
- 缺乏官方维护的低版本ARM原生包
2.依赖链断裂问题
- 部分Node.js 14依赖的本地模块(native addons)无ARM版本
- npm包中的postinstall脚本可能包含不兼容的命令
解决方案:通过Rosetta 2架起兼容的桥梁
经过多次尝试,Rosetta 2转译方案被证明是最稳定可靠的方法。以下是详细步骤:
# 1. 安装 Rosetta 2(如果还没有)
softwareupdate --install-rosetta
# 2. 在 Rosetta 2 终端中运行
arch -x86_64 zsh
# 3. 在这个终端中安装 nvm(如果需要)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
# 4. 安装 Node.js v14
nvm install v14.21.3
安装后,每次运行 Node v14 的项目时,需要在 Rosetta 终端中:
arch -x86_64 zsh
nvm use v14
效果图
正常下载并切换 node 14版本,安装 node_modules
项目正常运行