主题
问题解决
如果尝试安装某个 Node.js 版本失败,请务必运行 nvm cache clear
来删除缓存的 Node.js 下载文件,否则可能会遇到以下错误:
curl: (33) HTTP server doesn't seem to support byte ranges. Cannot resume.
macOS 故障排除
nvm node 版本在 vim shell 中找不到
如果将 node 版本设置为非系统版本(例如
nvm use 6.2.1
),然后在 vim 中运行:!node -v
发现显示的是系统版本(例如v0.12.7
),则需要运行以下命令:bashsudo chmod ugo-x /usr/libexec/path_helper
有关此问题的更多信息,请参见 dotphiles/dotzsh。
nvm 与 npm 配置中的 "prefix" 选项不兼容
一些解决此问题的方法可以在此处找到。
还有一个导致此问题的特例,即
$HOME
路径与用户的实际主目录名称不匹配。你必须确保
$HOME
中的用户目录名称与通过运行ls /Users/
查看到的用户目录名称以相同的方式大写(请参阅此问题)。要更改用户目录和/或帐户名称,请按照此处的说明进行操作。
Homebrew 使 zsh 目录不安全
zsh compinit: insecure directories, run compaudit for list.
Homebrew 会导致不安全的目录,例如
/usr/local/share/zsh/site-functions
和/usr/local/share/zsh
。这不是一个 nvm 问题 - 它是一个 Homebrew 问题。有关与此问题相关的一些解决方案,请参见此处。具有 Apple Silicon 芯片的 Mac
在 node.js v15.3 中添加了对 Apple Silicon 芯片架构的实验性支持,完整的支持是在 v16.0 中添加的。因此,如果尝试像往常一样安装旧版本的 node,可能会在安装 node 时遇到编译错误,或者在运行代码时遇到内存不足错误。
因此,如果想在 Apple Silicon Mac 上运行低于 v16.0 的版本,则最好编译 node,以针对 x86_64 Intel 架构,这样 Rosetta 2 就可以将 x86_64 处理器指令转换为基于 ARM 的 Apple Silicon 指令。你需要做以下操作:
安装 Rosetta,如果尚未安装
bash$ softwareupdate --install-rosetta
打开一个使用 Rosetta 运行的 shell
bash$ arch -x86_64 zsh
注意:这个终端会话现在正在运行 zsh。如果 zsh 不是你通常使用的 shell,nvm 可能不会像对于你通常的 shell 通过你的 dotfiles 自动 source 那样。如果是这种情况,请确保 source nvm。
bash$ source "${NVM_DIR}/nvm.sh"
安装你感兴趣的旧版本的 node。让我们以 v12.22.1 为例。这将获取 node 源代码并编译它,这将需要几分钟。
bash$ nvm install v12.22.1 --shared-zlib
注意:你可能想知道为什么包括
--shared-zlib
。最近版本的苹果系统 clang 编译器中存在一个错误。如果你的系统上安装了其中一个损坏的版本,即使你没有包含--shared-zlib
标志,上面的步骤也可能成功。但是,当你尝试使用旧版本的 node.js 安装 npm 包时,你将看到不正确的数据检查错误。如果要避免可能出现的麻烦,建议包含该标志。更多细节,请参见此问题和此注释。退出回到你的本机 shell。
bash$ exit
bash$ arch arm64
注意:如果在第二步中选择了标记为 "Open using Rosetta" 的框,而不是运行 CLI 命令,则会看到 i386。除非你有另一个原因选择了该框,否则现在可以取消选中它。
检查架构是否正确。x64 是 x86_64 的缩写,这是你希望看
🎉 机场推荐
- CyberGuard:IEPL/IPLC 高速专线,¥18.00/月
- EFCloud:TG万人人气机场,¥10.00/月