当前位置: 首页 > news >正文

使用NVM管理Node.js版本

🍁简介

在当前日常前端开发中,不同项目可能依赖于不同版本的Node.js
一个项目可能需要Node.js 14,而另一个项目可能需要Node.js 18甚至更高版本。
直接安装和卸载不同版本的Node.js不仅繁琐,而且容易导致环境混乱。

Node Version Manager NVM 是一个命令行工具,允许在同一个系统上安装多个Node.js版本,并根据需要切换。

它最初由Tim Caswell创建,现在有两个主要分支:

  • 一个是原始版本的bash实现(通常称为nvm-sh/nvm),
  • 另一个是基于Windows的独立实现(nvm-windows)
  • nvm-sh:https://github.com/nvm-sh/nvm
  • nvm-windows:https://github.com/coreybutler/nvm-windows

✨相关原理

NVM的核心工作原理其实并不复杂,但非常巧妙:

  1. 隔离环境:NVM将每个Node.js版本安装在不同的目录中,相互隔离,避免冲突

  2. PATH管理:当切换Node.js版本时,NVM会修改系统的PATH环境变量,指向所选版本的Node.js二进制文件所在目录

  3. 符号链接:NVM使用符号链接symlink指向当前激活的Node.js版本。在nvm-windows中,这通过实际修改系统环境变量实现

  4. 版本检测:NVM通过检查项目目录中的.nvmrc文件或使用命令行参数来确定要使用的Node.js版本

具体来说,当使用nvm use命令时,NVM会:

  • 查找指定版本的Node.js安装目录
  • 将该版本的bin目录添加到PATH环境变量的最前面
  • (在Unix系统中)创建一个指向当前激活版本的符号链接

这样,当在终端中运行nodenpm命令时,系统会自动使用当前激活的版本。

🧰安装与配置

🔩在Linux/macOS上安装NVM

对于LinuxmacOS用户,官方推荐的安装方式是通过安装脚本:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

或者使用wget:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

安装完成后,需要将以下内容添加到shell配置文件(如~/.bashrc~/.zshrc~/.profile)中:

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

然后重新加载配置文件:

source ~/.bashrc  # 或对应的配置文件

🔨在Windows上安装NVM

Windows用户需要使用nvm-windows,这是一个独立的项目:

  1. 首先卸载任何现有Node.js版本
  2. 下载最新版本的nvm-setup.zip从https://github.com/coreybutler/nvm-windows/releases
  3. 运行安装程序,按照提示完成安装
  4. 以管理员身份打开命令提示符或PowerShell

💽验证安装

安装完成后,可以通过以下命令验证NVM是否安装成功:

nvm --version

如果显示版本号,则表示安装成功。

💻基本使用教程

📦安装Node.js版本

使用NVM安装特定版本的Node.js非常简单:

# 安装最新LTS版本
nvm install --lts# 安装最新版本
nvm install latest# 安装特定版本
nvm install 16.14.0
nvm install 14.19.0

🎈查看已安装的版本

要查看已安装的所有Node.js版本:

nvm list

在Windows上,使用:

nvm list

📖切换Node.js版本

在不同版本之间切换非常简单:

# 切换到特定版本
nvm use 16.14.0# 切换到最新LTS版本
nvm use --lts# 切换到系统安装的Node.js(如果有)
nvm use system

📐设置默认版本

可以设置一个默认的Node.js版本,每次打开新终端时自动使用:

nvm alias default 16.14.0

📍在项目中使用特定版本

在项目根目录创建.nvmrc文件,指定所需的Node.js版本:

# 在项目根目录创建.nvmrc文件
echo "16.14.0" > .nvmrc

然后运行以下命令使用该版本:

nvm use

📝无法切换Node版本时的手动下载教程

有时由于网络问题,NVM可能无法从官方源下载Node.js二进制包。在这种情况下,可以手动下载并安装。

🔎手动下载Node.js二进制包

  1. 访问Node.js官方下载页面:https://nodejs.org/dist/
  2. 找到需要的版本,例如v16.14.0
  3. 根据操作系统选择正确的压缩包
  • Windows: node-v16.14.0-win-x64.zip
  • Linux: node-v16.14.0-linux-x64.tar.xz
  • macOS: node-v16.14.0-darwin-x64.tar.gz

📺手动安装到NVM目录

  1. 找到NVM的安装目录:

    • Linux/macOS: ~/.nvm
    • Windows: %APPDATA%\nvm
  2. 在versions目录下创建对应的版本目录:

    # Linux/macOS
    cd ~/.nvm/versions/node
    mkdir v16.14.0# Windows
    cd %APPDATA%\nvm
    mkdir v16.14.0
    
  3. 将下载的压缩包解压到刚创建的目录中

  4. 重命名解压后的文件夹(如果需要)以确保结构正确

💾手动创建符号链接(仅Linux/macOS)

在Linux和macOS上,可能需要手动创建符号链接:

cd ~/.nvm/versions/node/v16.14.0
ln -s node-v16.14.0-linux-x64/* .

📼验证手动安装

完成手动安装后,运行以下命令验证:

nvm list  # 应该显示手动安装的版本
nvm use 16.14.0
node --version  # 应该显示v16.14.0

❓常见问题与解决方案(Q&A)

💖Q1: NVM命令未找到(command not found)

问题描述:安装NVM后,运行nvm命令显示"command not found"。

解决方案

  1. 确保已正确将NVM初始化脚本添加到shell配置文件中
  2. 重新加载配置文件:source ~/.bashrc(或对应的配置文件)
  3. 检查NVM_DIR环境变量是否设置正确

💖Q2: 切换版本后node命令仍然指向旧版本

问题描述:使用nvm use切换版本后,node -v显示的仍然是旧版本。

解决方案

  1. 检查是否有其他Node.js安装干扰,如全局安装的Node.js
  2. 尝试关闭并重新打开终端
  3. 运行which node(Linux/macOS)或where node(Windows)检查node命令的实际路径

💖Q3: Windows上权限不足错误

问题描述:在Windows上运行nvm use时出现权限错误。

解决方案

  1. 以管理员身份运行命令提示符或PowerShell
  2. 检查NVM安装目录的权限设置

💖Q4: NVM无法在脚本中使用

问题描述:在shell脚本中无法使用nvm命令。

解决方案

  1. 在脚本中显式加载nvm:
    source ~/.nvm/nvm.sh
    nvm use 16
    
  2. 或者使用nvm exec命令:
    nvm exec 16 node script.js
    

💖Q5: 安装时出现"Checksum does not match"错误

问题描述:安装Node.js版本时出现校验和不匹配错误。

解决方案

  1. 清除NVM缓存:
    nvm cache clear
    
  2. 重试安装命令
  3. 如果问题依旧,考虑手动下载安装

💖Q6: 在特定项目中自动切换版本失败

问题描述:在包含.nvmrc文件的项目目录中运行nvm use没有自动切换版本。

解决方案

  1. 确保.nvmrc文件内容正确,只包含版本号
  2. 可以安装avn(Automatic Version Number)工具自动切换:
    npm install -g avn avn-nvm
    avn setup
    

💖Q7: 卸载NVM和所有Node.js版本

问题描述:如何完全卸载NVM和所有安装的Node.js版本。

解决方案

  1. 删除NVM目录:
    • Linux/macOS: rm -rf ~/.nvm
    • Windows: 卸载nvm-windows程序并删除%APPDATA%\nvm目录
  2. 从shell配置文件中移除NVM相关行
  3. 删除可能残留的Node.js相关环境变量

💝高级用法与技巧

⭕使用别名简化版本管理

NVM允许为版本创建别名,简化版本管理:

# 创建别名
nvm alias my-project 16.14.0# 使用别名
nvm use my-project# 查看所有别名
nvm alias

❗在多项目环境中自动化版本切换

对于使用多个Node.js版本的项目环境,可以配置自动化切换:

  1. 在每个项目根目录创建.nvmrc文件
  2. 安装zsh-nvm插件(对于Zsh用户)
  3. 或使用direnv工具自动设置环境变量

💯与CI/CD集成

在持续集成/持续部署环境中使用NVM:

# 示例GitLab CI配置
before_script:- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash- source ~/.nvm/nvm.sh- nvm install 16- nvm use 16

结束

http://www.hskmm.com/?act=detail&tid=8763

相关文章:

  • day12-Trae之一键换脸APP开发02
  • day35大模型应用开发-模型微调
  • Rust多线程:Worker 结构体与线程池中任务的传递机制
  • day10-AI短视频01
  • 详细介绍:今日分享 KMP算法
  • P6631 [ZJOI2020] 序列 题解
  • 初始化一个rust环境
  • 编程里边有好多不容易触及的知识点
  • 25.9.18随笔联考总结
  • P3642 [APIO2016] 烟花表演 解题报告
  • Manim实现闪光轨迹特效
  • Slope Trick 学习笔记
  • 使用 libaudioclient 实现 Android Native层 音频测试工具
  • 漏洞详解--文件上传 如何花样绕过?!
  • 使用Windows客户端访问EDA环境的NFS共享
  • Day03-1
  • 使用php -S 127.0.0.1:8000 新建php服务
  • Day03
  • 完整教程:从“我店”模式看绿色积分电商平台的困境与破局
  • Java第三周课前思考
  • Java的安装及卸载
  • 题解:P13882 [蓝桥杯 2023 省 Java A] 小蓝的旅行计划
  • 实用指南:订阅式红队专家服务:下一代网络安全评估新模式
  • 更快的布尔矩阵乘法
  • 数据结构初阶——红黑树的实现(C++) - 教程
  • CMC蒲和平3.1
  • 解码C语言数组
  • github启用Disscussions讨论功能
  • RWA技术规范解读:如何实现现实世界资产的合规代币化
  • 干货预警!Apache SeaTunnel 助力多点 DMALL 构建数据集成平台,探索AI新零售行业应用!