我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章

本文对比了Node.js版本管理工具NVM和FNVM,重点分析了它们在开发语言、启动速度、自动切换版本、跨平台支持及社区生态等方面的差异。NVM基于Shell脚本,功能全面且跨平台支持广泛,适合传统项目开发;而FNVM采用Rust编写,启动更快,支持自动检测版本文件,更适合现代开发需求。文章还详细介绍了两者的安装方法、使用示例及镜像加速配置,为开发者提供了实用参考。

# NVM 和 FNM 对比

Node.js 版本管理工具(如 nvmfnm)允许你在同一台机器上安装和切换多个 Node.js 版本,适用于不同项目使用不同 Node.js 版本的场景。以下是它们的对比:

特性 NVM FNM
开发语言 Shell(Bash) Rust(更快)
安装方式 Shell 脚本 Shell 脚本 / Cargo
启动速度 较慢(Shell 解析) 极快(Rust 二进制)
自动切换 需手动运行 nvm use 支持自动检测 .node-version
跨平台 支持(包括 WSL) 支持(包括 Windows)
社区生态 更成熟,文档丰富 较新,但增长迅速
适用场景 传统项目,需要稳定性和广泛支持 现代开发,追求速度和轻量

# NVM(Node Version Manager)

GitHub: https://github.com/nvm-sh/nvm
特点

  • 成熟稳定,社区广泛使用,支持所有主流 Shell(Bash/Zsh/Fish)。
  • 跨平台(macOS/Linux/Windows WSL)。
  • 功能全面,支持:
    • 安装/卸载任意 Node.js 版本。
    • 切换全局/项目级 Node.js 版本。
    • 自动读取 .nvmrc 文件切换版本。

# 安装 NVM

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

国内镜像

# 添加北京外国语的镜像
tee -a <<<"export NVM_NODEJS_ORG_MIRROR='https://mirrors.bfsu.edu.cn/nodejs-release/'" ~/.bashrc
source ~/.bashrc
# 下载并执行nvm
curl -o- https://gitee.com/banjiaojuhao/nvm/raw/v0.39.1/install.sh | sed 's|https://github.com/${NVM_GITHUB_REPO}.git|https://gitee.com/banjiaojuhao/nvm.git|' | bash

然后重新加载 Shell:

source ~/.bashrc  # 或 ~/.zshrc

# 卸载NVM

nvm的卸载是⼿动完成的,但是不复杂。

  1. ⾸先,删掉nvm⽂件

    rm -rf "$NVM_DIR"
  2. 随后,修复环境变量,修改

    ~/.bashrc (如果没有就去bash_profile找找)
    # 删掉以下这⼏⾏
    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
    [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
  3. 搞定。

# 用法

nvm install 18      # 安装 Node.js 18
nvm use 18          # 临时使用 18
nvm alias default 18 # 设为默认版本
nvm ls              # 查看已安装版本
命令 说明
nvm arch 查看当前系统的位数和当前nodejs的位数
nvm list 查看已经安装的版本
nvm list installed 查看已经安装的版本
nvm list available 查看网络可以安装的版本
nvm install [arch] 安装制定版本的node 并且可以指定平台 version 版本号 arch 平台
nvm on 打开nodejs版本控制
nvm off 关闭nodejs版本控制
nvm proxy [url] 查看和设置代理
nvm node_mirror [url] 设置或者查看setting.txt中的node_mirror
nvm npm_mirror [url] 设置或者查看setting.txt中的npm_mirror
nvm uninstall 卸载指定的版本
nvm use [version] [arch] 切换指定的node版本和位数
nvm root [path] 设置和查看root路径
nvm version 查看当前的版本,version可简化为v。

# FNM(Fast Node Manager)

GitHub: https://github.com/Schniz/fnm
特点

  • 速度更快(Rust 编写,启动时间短)。
  • 自动切换版本(支持 .node-version.nvmrc 文件)。
  • 轻量级,适合现代 Shell(Bash/Zsh/Fish)。
  • 支持多平台(macOS/Linux/Windows)。

# 安装 FNM

# 下载并运行安装脚本
curl -fsSL https://fnm.vercel.app/install | bash
## 国内方式
curl -fsSL https://gitee.com/Arnni/fnm/raw/master/.ci/install.sh | bash

重新加载 Shell:

source ~/.bashrc  # 或 ~/.zshrc

wsl内可能报错

sudo mkdir -p /run/user/1000/fnm_multishells
sudo chown -R 1000 /run/user/1000/

# 基本用法

fnm install --lts  # 安装最新的LTS
fnm install 18     # 安装 Node.js 18
fnm use 18         # 临时使用 18
fnm default 18     # 设为默认版本
fnm list           # 查看已安装版本
fnm list-remote    # 列出所有可用版本
fnm uninstall <版本>  # 如 fnm uninstall 18

# 配置 Shell

  • 如果 fnm 没有自动添加到配置文件,可以手动添加以下内容到你的 Shell 配置文件:

    # fnm 配置
    export FNM_DIR="${HOME}/.local/share/fnm"  # 明确指定 fnm 目录
    if [ -d "$FNM_DIR" ]; then
      export PATH="$FNM_DIR:$PATH"             # 将 fnm 自身路径加入 PATH
      eval "$(fnm env --use-on-cd)"            # 使用现代语法初始化
    fi
  • 然后重新加载配置。

    source ~/.bashrc  # 或 ~/.zshrc

# 镜像加速配置

# FNM加速

#windows环境变量
[Environment]::SetEnvironmentVariable('FNM_NODE_DIST_MIRROR', 'https://mirrors.aliyun.com/nodejs-release/', 'User')
echo 'export FNM_NODE_DIST_MIRROR=https://npmmirror.com/mirrors/node' >> ~/.zshrc

# NVM加速下载

  • 临时加速方案

    export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
  • 永久配置方案: 将以下内容添加到 ~/.bashrc~/.zshrc

    echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node' >> ~/.bashrc
    source ~/.bashrc

# Windows NVM加速

# 阿里云镜像
nvm npm_mirror https://npmmirror.com/mirrors/npm/
nvm node_mirror https://npmmirror.com/mirrors/node/

# 腾讯云镜像
nvm npm_mirror http://mirrors.cloud.tencent.com/npm/
nvm node_mirror http://mirrors.cloud.tencent.com/nodejs-release/

或在 setting.txt 中添加:

node_mirror: https://npmmirror.com/mirrors/node/
npm_mirror: https://npmmirror.com/mirrors/npm/

# Npn镜像源管理

# 查看当前源
npm config get registry

# 切换国内淘宝镜像
npm config set registry https://registry.npmmirror.com/
yarn config set registry https://registry.npmmirror.com
pnpm config set registry https://registry.npmmirror.com

# 官方源恢复
npm config set registry https://registry.npmjs.org/
yarn config set registry https://registry.yarnpkg.com
pnpm config set registry https://registry.npmjs.org

# nrm 管理 npm 源
npm install -g nrm --registry=https://registry.npmmirror.com
# 常用命令
nrm ls                   # 列出镜像源
nrm use taobao           # 切换镜像源
nrm test                 # 测速
nrm add custom https://custom-registry.com  # 添加自定义源

# nrm管理npm源

  • nrm 是一个用来管理npm源的工具 , NRM 安装

    sudo npm install -g nrm --registry=https://registry.npm.taobao.org
  • 查看

    C:\Users\fulsun>nrm ls
    
    * npm -------- https://registry.npmjs.org/
      yarn ------- https://registry.yarnpkg.com/
      cnpm ------- http://r.cnpmjs.org/
      taobao ----- https://registry.npm.taobao.org/
      nj --------- https://registry.nodejitsu.com/
      npmMirror -- https://skimdb.npmjs.com/registry/
      edunpm ----- http://registry.enpmjs.org/
  • nrm 常用命令

    nrm ls # 列出npm源
    nrm use <registry> #选择源
    nrm add  <registry> <url> [home] #增加源
    nrm delete <registry> #删除源
    nrm test #测速

# Npm/Yarn使用

# npm常用命令

  • 命令

    npm install 安装模块
    npm uninstall 卸载模块
    npm update 更新模块
    npm outdated 检查模块是否已经过时
    npm ls 查看安装的模块
    npm init 在项目中引导创建一个package.json文件
    npm help 查看某条命令的详细帮助
    npm root 查看包的安装路径
    npm config 管理npm的配置路径
    npm cache 管理模块的缓存
    npm start 启动模块
    npm stop 停止模块
    npm restart 重新启动模块
    npm test 测试模块
    npm version 查看模块版本
    npm view 查看模块的注册信息
    npm adduser  用户登录
    npm publish 发布模块
    npm access 在发布的包上设置访问级别
    npm package.json的语法
    
    npm install         # 安装依赖
    npm install -g      # 全局安装
    npm uninstall       # 卸载模块
    npm update          # 更新模块
    npm init            # 初始化项目
    npm ls -g --depth=0 # 查看全局安装的模块
    npm cache clean -f  # 清理缓存

# YARN

  • 安装

    npm install -g yarn
  • 换镜像

    yarn config get registry
    # 设置国内镜像-淘宝镜像
    yarn config set registry https://registry.npm.taobao.org --global
    # 设置官方镜像
    yarn config set registry https://registry.yarnpkg.com
  • 配置

    yarn config get strict-ssl
    yarn config set strict-ssl false
  • 使用

    命令 说明
    yarn init 初始化一个新项目
    yarn add [package] 添加依赖包
    yarn add [package]@[version]
    yarn add [package]@[tag]
    yarn add [package] --dev -D 将依赖项添加到不同依赖项类别中
    yarn add [package] --peer
    yarn add [package] --optional
    yarn upgrade 升级所有依赖项,不记录在 package.json 中
    yarn upgrade [package]
    yarn upgrade [package]@[version]
    yarn upgrade [package]@[tag]
    yarn upgrade --latest 忽略版本规则,升级到最新版本,并且更新 package.json
    yarn remove [package] 移除依赖包
    yarnyarn install 安装项目的全部依赖
    yarn install --force 强制重新下载安装
    yarn global add [package] 全局安装
    yarn [global] list 列出当前项目的依赖
    yarn list --depth=0 限制依赖的深度
    yarn cache clean 清理缓存

# windowns修改npm安装目录

  • 普通方式安装的默认的安装路径:C:/用户/[用户名]/AppData/Roming/npm/node_meodules

  • scoop安装的不用修改, 位置在 \scoop\apps\nvm\current\nodejs\nodejs\node_modules

  1. 打开CMD,查看配置

    $  npm config ls
    ; cli configs
    metrics-registry = "https://registry.npmjs.org/"
    scope = ""
    user-agent = "npm/5.6.0 node/v8.11.3 win32 x64"
    
    ; builtin config undefined
    prefix = "C:\\Users\\XXX\\AppData\\Roaming\\npm"
    
    ; node bin location = C:\Users\sfuli\local\nodejs\node.exe
    ; cwd = C:\Users\sfuli\local\blog\zy
    ; HOME = C:\Users\sfuli
    ; "npm config ls -l" to show all defaults.
  2. 在其它物理盘建立文件夹如:D:\develop\nodejs\localnpm,将路径加入环境变量

  3. 重新设置

    npm config set prefix "D:\develop\nodejs\localnpm"
    npm config set cache "D:\develop\nodejs\localnpm\cache"
    
    # 或在~目录下新建一个".npmrc"文件
    prefix=C:\Users\fulsun\develop\nodejs\localnpm
    cache=C:\Users\fulsun\develop\nodejs\localnpm\cache
  4. 检查

    npm config ls
    ; cli configs
    metrics-registry = "https://registry.npmjs.org/"
    scope = ""
    user-agent = "npm/5.6.0 node/v8.11.3 win32 x64"
    
    ; userconfig C:\Users\sfuli\.npmrc
    cache = "C:\\Users\\XXX\\local\\nodejs\\localnpm\\cache"  //这里会改变
    prefix = "C:\\Users\\XXX\\local\\nodejs\\localnpm"
    
    ; builtin config undefined
    
    ; node bin location = C:\Users\sfuli\local\nodejs\node.exe
    ; cwd = C:\Users\sfuli\local\blog\zy
    ; HOME = C:\Users\sfuli
    ; "npm config ls -l" to show all defaults.

    需要将上面设置的路径(D:\develop\nodejs\localnpm)添加到环境变量path中

  5. 测试

    npm install express -g
    -g意思是安装到全局目录下,即 D:\develop\nodejs\localnpm下面的node_modules

# NPM更新依赖

  • 简单更新

    # 查看npm最新版本
    npm view npm version
    # 查看所有版本
    npm view npm versions
    # 安装最新版本覆盖旧版本 npm update
    npm install [email protected] -g
  • 项目对应依赖包一般保存在 package.json 文件中,相对应版本号的形式为mojor.minor.patch

    • major 表示非兼容的重大 API 改变(主要的)

    • minor 表示向后兼容的功能性改变(次要的)

    • patch 表示向后兼容的 bug 修正(修补的)

      * 匹配最新的 major 版本依赖包,eg:比如 *1.2.3 会匹配 x.x.x,
      ^ 匹配最新的 minor 版本依赖包,eg: ^1.1.0 可以更新匹配所有 1.x.x 的包,不会更新匹配 2.x.x
      ~ 匹配最新的 patch 版本依赖包,eg: ~1.1.0 可以更新匹配所有 1.1.x 的包,不会更新匹配 1.2.x
  • 更新指定依赖安装包(根据前缀符号更新,有时需要在 package.json 手动更改依赖包相应版本号再更新)

    npm update tdesign-miniprogram -S  (--save/-S or --save-dev/-D)
  • 多个依赖包:

    # 批量更新依赖包的话推荐两个库:npm-check-updates和npm-check
    # npm-check-updates:https://www.npmjs.com/package/npm-check-updates
    npm install -g npm-check-updates
    # 检查当前可升级依赖:
    ncu
    # 更新package.json文件:
    ncu -u

# zsh配置

# fnm
export PATH=/home/sun/.fnm:$PATH
eval "`fnm env`"

# pnpm
export PNPM_HOME="/home/sun/.local/share/pnpm"
case ":$PATH:" in
  *":$PNPM_HOME:"*) ;;
  *) export PATH="$PNPM_HOME:$PATH" ;;
esac
# pnpm end
更新于

请我喝[茶]~( ̄▽ ̄)~*

Fulsun 微信支付

微信支付

Fulsun 支付宝

支付宝