我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章
本文对比了Node.js版本管理工具NVM和FNVM,重点分析了它们在开发语言、启动速度、自动切换版本、跨平台支持及社区生态等方面的差异。NVM基于Shell脚本,功能全面且跨平台支持广泛,适合传统项目开发;而FNVM采用Rust编写,启动更快,支持自动检测版本文件,更适合现代开发需求。文章还详细介绍了两者的安装方法、使用示例及镜像加速配置,为开发者提供了实用参考。
# NVM 和 FNM 对比
Node.js 版本管理工具(如 nvm 和 fnm)允许你在同一台机器上安装和切换多个 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的卸载是⼿动完成的,但是不复杂。
-
⾸先,删掉nvm⽂件
rm -rf "$NVM_DIR" -
随后,修复环境变量,修改
~/.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 -
搞定。
# 用法
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] 移除依赖包 yarn或yarn 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
-
打开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. -
在其它物理盘建立文件夹如:
D:\develop\nodejs\localnpm,将路径加入环境变量 -
重新设置
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 -
检查
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中 -
测试
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