菜单

概述

相关源文件

本文档提供了 Node 版本管理器(NVM)的全面概述,NVM 是一种用于在单一系统上管理多个 Node.js 版本的工具。NVM 允许用户通过一组 shell 函数来安装、切换和管理不同的 Node.js 版本。本页面涵盖了 NVM 的高层架构、核心组件和关键流程。

有关详细的安装说明,请参阅 安装。有关特定的使用模式和命令,请参阅 使用

什么是 NVM?

NVM 是 Node.js 的一个版本管理器,旨在按用户安装并按 shell 调用。它适用于 Unix、macOS 和适用于 Linux 的 Windows 子系统(WSL)上的任何符合 POSIX 标准的 shell(sh、dash、ksh、zsh、bash)。

主要功能包括

  • 安装和切换多个 Node.js 版本
  • 为不同项目使用不同的 Node.js 版本
  • 设置默认 Node.js 版本
  • 使用 .nvmrc 文件自动切换版本
  • 支持长期支持(LTS)版本
  • 在 Node.js 版本之间迁移 npm 包

来源:README.md96-97 README.md73-75

系统架构

NVM 具有以 shell 为中心的核心架构,它修改用户的 PATH 环境变量,而不是使用符号链接或全局安装。这使得它能够在不需要 root 权限的情况下运行。

核心架构图

来源:nvm.sh1-100 install.sh1-50 README.md96-120

核心组件

NVM 由几个关键组件组成,它们协同工作以提供版本管理功能

1. nvm.sh

定义所有 NVM 函数并提供核心功能的主脚本。它被用户 shell 配置文件加载,并使 nvm 命令可用。

主要功能包括

  • nvm_version() - 解析并返回版本标识符
  • nvm_ensure_version_installed() - 验证版本是否已安装
  • nvm_is_version_installed() - 检查特定版本是否已安装
  • nvm_version_path() - 返回版本的安装路径
  • nvm_process_nvmrc() - 处理 .nvmrc 文件以实现自动版本切换

来源:nvm.sh1-15 nvm.sh171-185 nvm.sh508-628 nvm.sh738-766

2. install.sh

下载和设置 NVM 的安装脚本。它配置用户 shell 配置文件以加载 nvm.sh 并设置 NVM 的目录结构。

主要功能包括

  • nvm_default_install_dir() - 确定默认安装目录
  • nvm_detect_profile() - 检测用户的 shell 配置文件
  • nvm_do_install() - 执行实际的安装过程
  • nvm_install_node() - 如果指定,自动安装 Node.js 版本

来源:install.sh23-32 install.sh278-317 install.sh369-480 install.sh206-224

3. 目录结构

来源:nvm.sh667-684 nvm.sh682-684 README.md392-395

关键流程

版本解析过程

当用户指定 Node.js 版本(通过显式版本、别名或 .nvmrc 文件)时,NVM 会通过一个明确定义的流程将其解析为特定版本。

来源:nvm.sh701-735 nvm.sh738-766 nvm.sh534-601

安装过程

安装过程涉及下载和设置 NVM,然后配置 shell 环境以配合使用它。

来源:install.sh369-480 install.sh126-201 install.sh226-263 install.sh206-224

Shell 集成

NVM 通过修改 PATH 环境变量来优先使用选定的 Node.js 版本,从而与用户的 shell 集成。这种方法允许在不进行全局更改的情况下无缝切换版本。

Shell 集成表

功能实现目的
PATH 管理nvm_change_path()修改 PATH 以使用选定的 Node.js 版本
自动检测nvm_find_nvmrc()在当前或父目录中查找 .nvmrc 文件
Shell Sourcing修改 shell 配置文件在 shell 启动时加载 nvm.sh
命令补全bash_completion为 NVM 命令提供 Tab 补全
Shell 函数nvm 命令函数将 NVM 功能暴露给 shell

来源:nvm.sh981-1003 nvm.sh508-514 install.sh425-429

配置

NVM 可通过环境变量和每个项目的配置文件组合进行配置。

关键配置方法

  1. 环境变量

    • NVM_DIR - 设置 NVM 安装的位置
    • NVM_COLORS - 自定义颜色输出
    • NVM_NODEJS_ORG_MIRROR - 指定自定义 Node.js 镜像
  2. 项目特定配置

    • .nvmrc 文件可以按项目指定 Node.js 版本
    • 格式:版本号、别名或 LTS 标识

来源: README.md115-119 README.md125-130 README.md445-451

流程示例

版本选择过程

当用户运行 nvm use [version] 时,将执行以下过程

  1. NVM 通过 nvm_version() 解析指定的版本
  2. 它使用 nvm_is_version_installed() 检查版本是否已安装
  3. 如果未安装,它会建议安装该版本
  4. 如果已安装,它会使用 nvm_change_path() 修改 PATH,以优先使用选定的版本
  5. 它会设置环境变量以跟踪当前版本

来源: nvm.sh738-766 nvm.sh171-185 nvm.sh981-1003

使用 .nvmrc 自动切换

当用户导航到一个包含 .nvmrc 文件的目录时

  1. NVM 使用 nvm_find_nvmrc() 检测到 .nvmrc 文件
  2. 它使用 nvm_process_nvmrc() 读取和处理该文件
  3. 它使用 nvm_version() 解析指定的版本
  4. 如果版本已安装,它会切换到该版本,否则会提示进行安装

来源: nvm.sh508-514 nvm.sh534-601 nvm.sh602-628

总结

NVM 提供了一种基于 shell 的 Node.js 版本管理方法,通过修改 PATH 而非符号链接或系统范围的更改来实现。这种设计使其能够在无需 root 权限的情况下运行,并可以按 shell 进行调用。该系统由 shell 脚本组成,这些脚本与用户的环境集成,以实现无缝的版本切换,并支持项目特定的配置和 LTS 版本。