教程 nvm tutorial

问题解决

如果尝试安装某个 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),则需要运行以下命令:

bash
  sudo 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 的缩写,这是你希望看