菜单

Shell 集成

相关源文件

本文档解释了 NVM 如何与不同的 shell 环境集成,并通过修改环境变量来实现 Node.js 版本管理。它涵盖了 NVM 如何检测 shell 配置文件,管理 PATH 和环境变量,提供命令补全,以及处理 .nvmrc 文件。有关项目特定版本配置的信息,请参阅 项目特定配置 (.nvmrc)。有关 NVM 命令的常规用法,请参阅 基本命令

Shell 集成概述

NVM 主要是一个 shell 工具,它通过修改 shell 环境来使用特定的 Node.js 版本。当 NVM 被 sourcing 时,它以几种方式与 shell 集成:

  1. 检测您的 shell 配置文件(如 .bashrc.zshrc 等)
  2. 提供用于管理 Node.js 版本的 shell 函数
  3. 修改 PATH 以使用选定的 Node.js 版本
  4. 设置 NVM 命令的命令补全
  5. 处理 .nvmrc 文件以自动切换版本

Shell 配置文件检测

安装 NVM 时,它需要检测要修改的适当 shell 配置文件。这对于在每次打开新 shell 时都能使用 NVM 至关重要。

nvm_detect_profile 函数实现了此逻辑,以查找要修改的适当 shell 配置文件。它首先检查 $PROFILE 环境变量,然后使用 $SHELL 变量确定 shell 类型,最后回退检查常见的配置文件。

来源:test/install_script/nvm_detect_profile1-149

PATH 管理

NVM 的核心机制之一是 PATH 管理。NVM 通过将选定的 Node.js 版本 bin 目录添加到 PATH 的开头来工作,以确保使用选定的版本。

当您运行 nvm use <version> 时,NVM 会修改您的 PATH 以优先使用选定 Node.js 版本的 bin 目录。当 NVM 被 sourcing 时,PATH 也会根据以下因素自动更新:

  1. 先前激活的版本
  2. 项目的 .nvmrc 文件(如果存在)
  3. 默认别名(如果已设置)

来源:test/sourcing/Sourcing nvm.sh should use the default if available and no nvm node is loaded1-28 test/sourcing/Sourcing nvm.sh should keep version if one is active1-21

环境变量

NVM 使用和设置了几个环境变量来控制其行为和维护状态。

可变目的默认值
NVM_DIRNVM 安装的目录$HOME/.nvm
NVM_SYMLINK_CURRENT如果设置,则创建到当前版本的符号链接未设置
NVM_RC_VERSION来自 .nvmrc 的缓存版本动态设置
NVM_BIN活动 Node.js bin 目录的路径动态设置
NVM_INC活动 Node.js include 目录的路径动态设置
PATH已修改,包含活动 Node.js 版本现有的 PATH
MANPATH已修改,包含活动 Node.js man page现有的 MANPATH
ZDOTDIRzsh 配置的自定义目录未设置

当 NVM 加载时,它会根据活动的 Node.js 版本设置环境变量。这确保了依赖这些环境变量的工具(如构建系统)能够正确找到 Node.js 和 npm。

来源:test/install_script/nvm_check_global_modules1-66 test/install_script/nvm_detect_profile1-149

命令补全

NVM 为 bash 和 zsh shell 提供了命令补全,以便更轻松地使用 NVM 命令和发现可用的 Node.js 版本。

命令补全系统在 bash_completion 文件中实现。对于 zsh 用户,NVM 会加载 bashcompinit 以提供 bash 兼容的补全。补全系统为以下内容提供建议:

  • NVM 命令(如 useinstallwhich
  • 已安装的 Node.js 版本
  • 别名(如 defaultstable

来源:bash_completion1-100

.nvmrc 支持

NVM 可以自动检测并使用 .nvmrc 文件中指定的 Node.js 版本,这使得项目特定的 Node.js 版本配置成为可能。

当使用带有 --install 标志 sourcing NVM 时,或在使用 NVM 进行自动检测时,NVM 会在当前目录中查找 .nvmrc 文件并使用指定的版本。

来源:test/sourcing/Sourcing nvm.sh with --install and .nvmrc should install it1-34 test/sourcing/Sourcing nvm.sh with --install should install the default1-38

特定于 Shell 的功能

NVM 可与不同的 shell 协同工作,其中一些功能针对特定的 shell 环境进行了定制。

Shell特殊功能配置文件
Bash原生命令补全.bashrc, .bash_profile
Zsh使用 bashcompinit 进行补全.zshrc, .zprofile
其他无补全的基本功能.profile

对于 zsh 用户,NVM 会遵循 ZDOTDIR 环境变量来查找适当的 zsh 配置文件,这在自定义环境中特别有用。

来源:test/install_script/nvm_profile_is_bash_or_zsh1-15 bash_completion86-97

安装集成

安装 NVM 时,它会修改您的 shell 配置文件,以便在打开新 shell 时自动加载 NVM。

安装过程会在您的 shell 配置文件中添加以下行,用于:

  1. Sourcing 主 NVM 脚本(nvm.sh
  2. 可选地加载命令补全
  3. 为 NVM 使用准备环境

来源:test/install_script/nvm_reset1-39 test/install_script/nvm_do_install1-19

安全考量

在与 shell 环境集成时,NVM 会采取安全措施:

  1. NVM 绝不会在未经验证的情况下执行来自远程源的 shell 代码
  2. 用户应审查对其 shell 配置文件的任何更改
  3. NVM 不会在环境变量中持久化敏感信息

结论

NVM 的 shell 集成是其功能的核心,它能够直接从 shell 进行无缝的版本切换和管理。通过检测 shell 配置文件、管理 PATH 变量、提供命令补全以及支持项目特定配置,NVM 为 Node.js 开发创造了流畅的工作流程。

有关将 NVM 与不同 Node.js 版本一起使用的更多信息,请参阅 版本管理。有关 NVM 命令的详细用法,请参考 基本命令