菜单

高级主题

相关源文件

本文档涵盖了 NVM 的高级用法场景和配置选项。它为需要更精细控制 NVM 如何运行的用户提供了更深入的技术细节,包括高级安装选项、环境变量配置、版本解析机制以及性能优化。有关基本用法,请参阅用法

目录

高级安装选项

NVM 提供了多种高级安装选项,可以在运行安装脚本之前通过环境变量进行自定义。

自定义安装路径

您可以使用以下环境变量来自定义安装目录、源存储库和 Node.js 版本

可变描述默认
NVM_DIR安装目录$HOME/.nvm$XDG_CONFIG_HOME/nvm
NVM_SOURCENVM 的源 URLGitHub 存储库 URL
PROFILE要更新的 shell 配置文件根据 shell 自动检测
NODE_VERSIONNVM 设置完成后要安装的 Node.js 版本

例如,要将 NVM 安装到自定义目录

您还可以通过设置 PROFILE=/dev/null 来阻止安装程序修改 shell 配置文件。

来源:install.sh23-33 install.sh416-428 README.md125-137

安装方法

NVM 可通过不同方法安装,每种方法都有其优点

方法描述用例
脚本安装仅下载必要文件快速安装,最小磁盘占用
Git 安装克隆整个存储库更方便地更新,访问开发工具
手动安装分步手动过程完全控制安装

脚本方法将根据可用工具自动在 Git 和脚本安装之间进行选择。

来源:install.sh391-416 README.md316-353

自定义包管理

全局包迁移

NVM 提供了高级功能,用于管理不同 Node.js 版本之间的 npm 包

当您升级 Node.js 同时保持开发环境时,此功能特别有用。

来源:nvm.sh197-434 README.md453-482

默认全局包

您可以通过创建 $NVM_DIR/default-packages 文件来配置 NVM,使其在每次安装新 Node.js 版本时自动安装一组全局包

# $NVM_DIR/default-packages
rimraf
eslint@7.0.0
typescript

每行应包含一个 npm 可作为包参数接受的包名称(以及可选的版本)。

来源:README.md486-495

高级环境变量

NVM 的行为可以通过各种环境变量进行自定义

环境变量描述默认
NVM_DIRNVM 安装的目录$HOME/.nvm
NVM_CD_FLAGS传递给 cd 命令的标志-q 用于 zsh,其他情况为空
NVM_BIN安装 Node 二进制文件的目录$NVM_DIR/versions/node/<version>/bin
NVM_COLORSNVM 输出的配色方案bygre
NVM_COMPLETION启用/禁用 NVM 命令补全默认启用
NVM_IOJS_ORG_MIRRORio.js 的自定义镜像https://iojs.org/dist
NVM_NODEJS_ORG_MIRRORNode.js 的自定义镜像https://node.org.cn/dist
NVM_RC_VERSION.nvmrc 文件的版本(只读)从 .nvmrc 确定
NVM_NO_COLORS禁用颜色输出默认未设置
NVM_SILENT禁止显示信息性输出默认未设置
NVM_AUTH_HEADERHTTP 请求的授权头默认未设置

设置配色方案

您可以自定义 NVM 对不同类型输出使用的配色方案

来源:nvm.sh435-463 nvm.sh1011-1096 README.md536-579

自定义镜像和身份验证

使用替代的 Node.js 镜像

如果您需要使用 Node.js 或 io.js 下载镜像(例如,在互联网访问受限的地区),您可以配置 NVM 使用替代的下载源

来源:README.md582-607 nvm.sh797-867

私有镜像的身份验证

对于需要身份验证的私有镜像,NVM 支持授权头

授权头在使用前会被清理,以去除潜在的危险字符。

来源:nvm.sh118-162 nvm.sh159-162

高级 .nvmrc 配置

复杂的版本解析

下图显示了 NVM 如何解析 Node.js 版本

.nvmrc 文件提供项目特定的 Node.js 版本配置。NVM 支持在 .nvmrc 中使用比仅版本号更高级的语法

# Simple version specification
16.13.0

# Using an alias
lts/gallium

# Using a version range
>=14.0.0

在确定使用哪个版本时,NVM 会遵循以下解析过程

  1. 检查命令中是否有显式的版本号
  2. 查找别名
  3. 在当前目录中搜索 .nvmrc 文件
  4. 如果未找到,则向上搜索目录树
  5. 使用 nvm_process_nvmrc 处理内容

来源:nvm.sh602-628 nvm.sh484-506 nvm.sh534-601

高级 .nvmrc 处理

NVM 的 .nvmrc 处理同时支持裸版本字符串和键值对配置

.nvmrc 处理器可以处理注释(以 # 开头的行)并支持简单的版本字符串和键值对配置,以便将来扩展。

来源:nvm.sh516-533 nvm.sh534-601

性能优化

缓存和下载优化

NVM 包含多项性能优化

  1. 压缩支持检测:NVM 会检查您的 curl 安装是否支持压缩,并在可用时使用它来缩短下载时间。

  2. 路径操作优化nvm_change_path 函数经过优化,可在切换 Node.js 版本时最大限度地减少路径操作。

  3. Shell 集成:NVM 的设计宗旨是与 shell 集成,而无需进行重新哈希或重启,使版本切换几乎瞬间完成。

来源:nvm.sh89-91 nvm.sh118-157 nvm.sh981-1004

减少 Shell 启动时间

对于关心 Shell 启动时间的用户,NVM 提供了延迟加载的方法

  1. --no-use 标志:在 source nvm.sh 时添加 --no-use,以推迟使用任何 Node.js 版本,直到显式请求为止
  1. 懒加载:实现一个函数,仅在首次使用 nvmnodenpm 命令时才加载 NVM。

  2. 自动调用版本:仅在需要时通过 cd hook 设置自动版本切换。

来源: README.md125-130 README.md637-671

排查高级设置问题

验证安装

对于复杂的安装,请使用以下命令验证 NVM 是否已正确安装:

请记住,which nvm 将无法工作,因为 NVM 是一个 shell 函数,而不是可执行文件。

常见高级问题

问题潜在原因解决方案
找不到版本无法访问自定义镜像检查镜像配置和连接性
身份验证问题身份验证头格式不正确确保 NVM_AUTH_HEADER 格式正确
迁移失败npm 版本不兼容使用 --latest-npm 或指定兼容的 npm 版本
PATH 冲突系统 Node.js 优先级更高检查 PATH 顺序和 shell 配置
性能问题版本切换过于频繁使用 .nvmrc 进行自动版本切换

来源: README.md265-276 nvm.sh159-162 nvm.sh197-434

与 Docker 和 CI 环境协同工作

在 Docker 容器和 CI 环境中,NVM 需要特别注意,尤其是在未加载配置文件(profile files)的非交互式 shell 中。

Docker 配置

对于 Docker 容器,可以使用特殊的 BASH_ENV 变量,bash 在非交互式调用时会加载它。

对于 CI/CD 作业,更稳健的方法是:

这种方法在交互式和非交互式容器环境中都适用。

来源: README.md139-212 Dockerfile94-102