nvm.sh 脚本是 Node 版本管理器 (NVM) 的核心组件。它是一个符合 POSIX 标准的 shell 脚本,允许用户安装、管理和切换多个 Node.js 版本。本文档详细介绍了 nvm.sh 脚本的内部结构、功能和执行流程。
有关 Shell 集成的信息,请参阅 Shell 集成,有关版本管理的信息,请参阅 版本管理。
当用户安装 NVM 时,安装过程会在用户的 shell 配置文件中添加一行,该行会 source (加载) nvm.sh 脚本。这将所有 NVM 函数加载到当前 shell 环境中。
被 source 后,脚本
nvm.sh 脚本围绕一系列处理 Node.js 版本管理不同方面的函数进行组织。这些函数遵循具有清晰职责的分层结构。
来源:nvm.sh16-45 nvm.sh740-766 nvm.sh702-736 nvm.sh172-185 nvm.sh981-1004
脚本定义了几个提供 NVM 功能基础的实用函数
| 功能 | 目的 | 实现 |
|---|---|---|
nvm_echo() | 跨 shell 安全 echo | 使用 `command printf %s\\n` 来避免问题 |
nvm_err() | 输出错误消息 | 重定向到 stderr |
nvm_has() | 检查命令是否存在 | 使用 `type` 检查命令是否可用 |
nvm_download() | 下载文件 | 同时处理 `curl` 和 `wget` |
nvm_grep() | 安全的 grep 包装器 | 通过清除选项来确保一致的行为 |
nvm_cd() | 安全目录更改 | 避免别名干扰 |
nvm_ls_current() | 获取当前的 Node.js 版本 | 检测当前激活的 Node.js 安装 |
来源:nvm.sh24-26 nvm.sh36-38 nvm.sh48-50 nvm.sh118-157 nvm.sh44-46 nvm.sh32-34 nvm.sh1300-1317
nvm.sh 脚本的一个关键功能是解析来自各种格式(版本号、别名等)的版本请求,并将其转换为实际安装的 Node.js 版本。
来源:nvm.sh702-736 nvm.sh1319-1397 nvm.sh740-766 nvm.sh602-628 nvm.sh534-601
版本解析过程如下
NVM 的核心机制之一是操作 `PATH` 环境变量以控制哪个 Node.js 版本处于活动状态。这主要由 `nvm_change_path()` 函数处理。
来源:nvm.sh981-1004 nvm.sh967-979 nvm.sh686-699
路径管理过程
脚本包含检测和使用 `.nvmrc` 文件中指定的 Node.js 版本的功能,这允许项目指定其所需的 Node.js 版本。
来源: nvm.sh508-514 nvm.sh602-628 nvm.sh534-601
处理 .nvmrc 文件
nvm_find_nvmrc() 通过遍历目录树向上查找最近的 .nvmrc 文件nvm_process_nvmrc() 读取和处理文件内容该脚本提供了一个强大的别名系统来管理 Node.js 版本的命名引用。
| 别名类型 | 描述 | 存储位置 |
|---|---|---|
| 用户定义 | 用户创建的自定义别名 | $NVM_DIR/alias/[name] |
| LTS 别名 | 指向长期支持版本 | $NVM_DIR/alias/lts/[name] |
| 默认别名 | 内置别名,如 'stable', 'node', 'iojs' | 动态解析 |
来源: nvm.sh1206-1220 nvm.sh682-684 nvm.sh893-927
来源: nvm.sh1319-1376 nvm.sh1275-1298
别名解析系统
当用户运行 NVM 命令时,脚本会按照特定的流程进行处理和执行。
来源: nvm.sh1319-1376 nvm.sh740-766 nvm.sh1425-1483
该脚本使用并遵循多个控制其行为的环境变量
| 可变 | 目的 | 默认值 |
|---|---|---|
NVM_DIR | NVM 安装的基础目录 | ~/.nvm 或 $XDG_CONFIG_HOME/nvm |
NVM_COLORS | 控制彩色输出 | bygre (蓝-黄-绿-红-默认) |
NVM_RC_VERSION | 存储从 .nvmrc 检测到的版本 | 默认未设置 |
NVM_NODEJS_ORG_MIRROR | 自定义 Node.js 下载镜像 | https://node.org.cn/dist |
NVM_IOJS_ORG_MIRROR | 自定义 io.js 下载镜像 | https://iojs.org/dist |
NVM_NO_COLORS | 禁用彩色输出 | 默认未设置 |
来源: nvm.sh435-464 nvm.sh1035-1034 nvm.sh602-628
脚本 nvm.sh 实施了多项安全措施以确保安全执行
nvm_echo, nvm_grep,以避免别名命令引起的问题.nvmrc 文件内容来源: nvm.sh46-50 nvm.sh159-162 nvm.sh436-443 nvm.sh534-601
脚本 nvm.sh 是一个复杂的 shell 脚本,提供了 NVM 的核心功能,包括:
.nvmrc 文件进行项目特定配置其符合 POSIX 标准的设计使其能够跨各种 shell 工作,使其成为 Node.js 开发人员管理多个 Node.js 版本的通用工具。