Node.js 版本管理、NPM 命令、与 NVM 完全指南

Node.js 版本概述

版本命名规则

Node.js 采用语义化版本控制(Semantic Versioning),格式为:主版本号.次版本号.修订号

  • 主版本号:不兼容的 API 修改
  • 次版本号:向下兼容的功能性新增
  • 修订号:向下兼容的问题修正

版本类型

LTS 版本(长期支持版本)

  • Active LTS:当前活跃维护的 LTS 版本
  • Maintenance LTS:维护模式的 LTS 版本
  • 特点:稳定性好,生产环境推荐使用
  • 发布周期:每年 10 月发布新的 LTS 版本

Current 版本(当前版本)

  • 特点:包含最新特性,可能不够稳定
  • 适用场景:开发环境、测试新特性

主要版本历史

版本 发布时间 LTS 状态 EOL 时间 主要特性
v18.x 2022.04 Active LTS 2025.04 fetch API、Test Runner
v16.x 2021.04 Maintenance LTS 2024.04 npm 7、Apple Silicon 支持
v14.x 2020.04 EOL 2023.04 Optional Chaining、Nullish Coalescing
v12.x 2019.04 EOL 2022.04 ES6 模块支持、TLS 1.3

NVM 简介与优势

什么是 NVM?

NVM(Node Version Manager)是 Node.js 版本管理工具,允许在同一台机器上安装和管理多个 Node.js 版本。

NVM 的优势

  1. 版本切换:快速切换不同 Node.js 版本
  2. 项目隔离:不同项目使用不同 Node.js 版本
  3. 测试兼容性:测试代码在多个版本下的兼容性
  4. 简化升级:轻松升级或降级 Node.js 版本

NVM 工具对比

工具 平台支持 特点
nvm Linux/macOS 原生 bash 脚本,功能完整
nvm-windows Windows Windows 专用版本
fnm 跨平台 Rust 编写,速度快
n Linux/macOS 简单轻量

NVM 安装指南

Windows 系统安装

方法一:使用 nvm-windows

  1. 下载安装包

    bash 复制代码
    # 访问GitHub下载最新版本
    https://github.com/coreybutler/nvm-windows/releases
  2. 运行安装程序

    • 下载 nvm-setup.zip
    • 解压并运行 nvm-setup.exe
    • 按提示完成安装
  3. 验证安装

    cmd 复制代码
    nvm version

方法二:使用 Chocolatey

powershell 复制代码
# 安装Chocolatey(如果未安装)
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# 安装nvm-windows
choco install nvm

Linux/macOS 系统安装

使用 curl 安装

bash 复制代码
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

使用 wget 安装

bash 复制代码
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

配置环境变量

bash 复制代码
# 添加到 ~/.bashrc 或 ~/.zshrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

# 重新加载配置
source ~/.bashrc

NVM 基础使用

查看版本信息

bash 复制代码
# 查看NVM版本
nvm --version

# 查看可安装的Node.js版本
nvm list available    # Windows
nvm ls-remote         # Linux/macOS

# 查看已安装的版本
nvm list              # Windows
nvm ls                # Linux/macOS

安装 Node.js 版本

bash 复制代码
# 安装最新LTS版本
nvm install --lts

# 安装指定版本
nvm install 18.17.0
nvm install 16.20.0

# 安装最新稳定版
nvm install node

# 安装最新版本并设置为默认
nvm install node --latest-npm

切换 Node.js 版本

bash 复制代码
# 切换到指定版本
nvm use 18.17.0

# 切换到最新LTS版本
nvm use --lts

# 设置默认版本
nvm alias default 18.17.0    # Linux/macOS
nvm use 18.17.0              # Windows每次启动终端需要重新设置

卸载 Node.js 版本

bash 复制代码
# 卸载指定版本
nvm uninstall 16.20.0

# 查看当前使用的版本
nvm current

npm 完全使用指南

npm 简介

npm(Node Package Manager)是 Node.js 的包管理器,是世界上最大的软件注册表。它不仅用于管理 Node.js 包,也是现代前端开发的核心工具。

npm 版本与更新

查看 npm 版本

bash 复制代码
# 查看当前npm版本
npm --version
npm -v

# 查看详细信息
npm version

# 查看所有相关版本信息
npm version --json

更新 npm

bash 复制代码
# 更新到最新版本
npm install -g npm@latest

# 更新到指定版本
npm install -g npm@8.19.2

# 查看可用版本
npm view npm versions --json

包管理命令

安装包

bash 复制代码
# 安装生产依赖
npm install <package-name>
npm i <package-name>                    # 简写

# 安装开发依赖
npm install <package-name> --save-dev
npm i <package-name> -D                 # 简写

# 安装全局包
npm install -g <package-name>

# 安装指定版本
npm install <package-name>@1.2.3
npm install <package-name>@latest
npm install <package-name>@beta

# 从Git仓库安装
npm install git+https://github.com/user/repo.git
npm install github:user/repo
npm install user/repo

# 从本地路径安装
npm install ./local-package
npm install ../another-package

# 安装所有依赖
npm install                             # 根据package.json安装
npm ci                                  # 从package-lock.json快速安装

卸载包

bash 复制代码
# 卸载本地包
npm uninstall <package-name>
npm remove <package-name>               # 别名
npm rm <package-name>                   # 简写

# 卸载开发依赖
npm uninstall <package-name> --save-dev

# 卸载全局包
npm uninstall -g <package-name>

# 清理未使用的包
npm prune                               # 移除未在package.json中的包
npm prune --production                  # 移除devDependencies

更新包

bash 复制代码
# 更新所有包
npm update

# 更新指定包
npm update <package-name>

# 更新全局包
npm update -g

# 检查过期包
npm outdated                            # 检查本地包
npm outdated -g                         # 检查全局包

# 查看包的最新版本
npm view <package-name> version
npm show <package-name> versions        # 查看所有版本

包信息查询

搜索包

bash 复制代码
# 搜索包
npm search <keyword>
npm s <keyword>                         # 简写

# 在线搜索(更详细)
npm search <keyword> --searchlimit=20
npm search <keyword> --json             # JSON格式输出

查看包信息

bash 复制代码
# 查看包详细信息
npm info <package-name>
npm view <package-name>                 # 别名
npm show <package-name>                 # 别名

# 查看特定字段
npm view <package-name> version
npm view <package-name> description
npm view <package-name> dependencies
npm view <package-name> repository
npm view <package-name> homepage

# 查看包的所有版本
npm view <package-name> versions
npm view <package-name> time            # 查看发布时间

# 查看包的文档
npm docs <package-name>
npm home <package-name>                 # 打开主页

# 查看包的仓库
npm repo <package-name>

列出已安装的包

bash 复制代码
# 列出本地包
npm list
npm ls                                  # 简写

# 只显示顶级包
npm list --depth=0

# 列出全局包
npm list -g
npm list -g --depth=0

# 列出特定包
npm list <package-name>
npm list <package-name> -g

# 以JSON格式输出
npm list --json
npm list --json --depth=0

# 列出生产环境包
npm list --prod
npm list --only=production

# 列出开发环境包
npm list --dev
npm list --only=development

脚本管理

运行脚本

bash 复制代码
# 运行package.json中定义的脚本
npm run <script-name>

# 常用内置脚本
npm start                               # 等同于 npm run start
npm stop                                # 等同于 npm run stop
npm test                                # 等同于 npm run test
npm restart                             # 先stop再start

# 查看所有可用脚本
npm run

# 静默运行(减少输出)
npm run <script-name> --silent
npm run <script-name> -s

# 传递参数给脚本
npm run <script-name> -- --arg1 --arg2

生命周期脚本

bash 复制代码
# npm会自动运行的生命周期脚本
preinstall                             # 安装前
install                                 # 安装时
postinstall                             # 安装后

preuninstall                            # 卸载前
uninstall                               # 卸载时
postuninstall                           # 卸载后

preversion                              # 版本变更前
version                                 # 版本变更时
postversion                             # 版本变更后

pretest                                 # 测试前
test                                    # 测试时
posttest                                # 测试后

prepublish                              # 发布前(已废弃)
prepublishOnly                          # 仅发布前
publish                                 # 发布时
postpublish                             # 发布后

配置管理

查看配置

bash 复制代码
# 查看所有配置
npm config list
npm config ls                           # 简写

# 查看详细配置
npm config list -l

# 查看特定配置
npm config get <key>
npm get <key>                           # 简写

# 常用配置查看
npm config get registry
npm config get cache
npm config get prefix

设置配置

bash 复制代码
# 设置配置
npm config set <key> <value>
npm set <key> <value>                   # 简写

# 常用配置设置
npm config set registry https://registry.npmmirror.com
npm config set cache ~/.npm
npm config set prefix /usr/local

# 设置代理
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

# 删除配置
npm config delete <key>
npm config rm <key>                     # 简写

# 编辑配置文件
npm config edit

配置文件位置

bash 复制代码
# 用户级配置文件
~/.npmrc                                # Unix/Linux/macOS
%USERPROFILE%\.npmrc                    # Windows

# 项目级配置文件
<project-root>/.npmrc

# 全局配置文件
/etc/npmrc                              # Unix/Linux
%APPDATA%\npm\etc\npmrc                 # Windows

缓存管理

缓存操作

bash 复制代码
# 查看缓存信息
npm cache verify

# 清理缓存
npm cache clean
npm cache clean --force                 # 强制清理

# 查看缓存目录
npm config get cache

# 设置缓存目录
npm config set cache /path/to/cache

# 查看缓存内容
npm cache ls                            # 列出缓存内容

发布与版本管理

初始化项目

bash 复制代码
# 初始化新项目
npm init
npm init -y                             # 使用默认值

# 使用模板初始化
npm init <template-name>
npm create <template-name>              # 等同于上面

# 常用模板
npm init react-app my-app
npm init vue my-app
npm init express-app my-app

版本管理

bash 复制代码
# 查看当前版本
npm version

# 升级版本
npm version patch                       # 修订版本 1.0.0 -> 1.0.1
npm version minor                       # 次版本   1.0.0 -> 1.1.0
npm version major                       # 主版本   1.0.0 -> 2.0.0

# 预发布版本
npm version prerelease                  # 1.0.0 -> 1.0.1-0
npm version prepatch                    # 1.0.0 -> 1.0.1-0
npm version preminor                    # 1.0.0 -> 1.1.0-0
npm version premajor                    # 1.0.0 -> 2.0.0-0

# 指定版本
npm version 1.2.3

发布包

bash 复制代码
# 登录npm
npm login
npm adduser                             # 别名

# 查看登录状态
npm whoami

# 发布包
npm publish

# 发布测试版本
npm publish --tag beta
npm publish --tag alpha

# 发布到指定registry
npm publish --registry https://registry.npmjs.org

# 撤销发布(24小时内)
npm unpublish <package-name>@<version>
npm unpublish <package-name> --force    # 撤销所有版本

安全与审计

安全审计

bash 复制代码
# 检查安全漏洞
npm audit

# 自动修复安全问题
npm audit fix

# 强制修复(可能导致破坏性更改)
npm audit fix --force

# 查看详细审计报告
npm audit --json
npm audit --parseable

# 设置审计级别
npm audit --audit-level moderate        # 只显示中等及以上级别
npm audit --audit-level high            # 只显示高级别

包完整性

bash 复制代码
# 验证包完整性
npm ls                                  # 检查依赖完整性
npm doctor                              # 运行健康检查

# 检查包的签名
npm verify-signatures

# 安装时验证完整性
npm install --package-lock-only
npm ci                                  # 严格按照lock文件安装

工作空间管理

工作空间操作

bash 复制代码
# 初始化工作空间
npm init -w ./packages/package-a

# 在工作空间中安装依赖
npm install lodash -w package-a

# 在所有工作空间运行命令
npm run test --workspaces

# 在特定工作空间运行命令
npm run build -w package-a
npm run build --workspace=package-a

# 列出工作空间
npm ls --workspaces

高级功能

npx 使用

bash 复制代码
# 执行本地安装的包
npx <command>

# 执行远程包(临时下载执行)
npx create-react-app my-app
npx cowsay "Hello World"

# 指定包版本执行
npx <package>@<version>

# 忽略本地包,强制下载
npx --ignore-existing <package>

# 静默模式
npx --quiet <package>
npx -q <package>

链接开发

bash 复制代码
# 创建全局链接
npm link                                # 在包目录中执行

# 链接到项目
npm link <package-name>                 # 在项目目录中执行

# 取消链接
npm unlink <package-name>
npm unlink                              # 在包目录中执行

私有包管理

bash 复制代码
# 配置私有registry
npm config set @company:registry https://npm.company.com

# 安装私有包
npm install @company/private-package

# 发布私有包
npm publish --access restricted        # 私有包
npm publish --access public            # 公开包

性能优化

安装优化

bash 复制代码
# 使用 npm ci 进行快速安装
npm ci                                  # 适用于 CI/CD 环境

# 并行安装
npm install --prefer-offline           # 优先使用离线缓存
npm install --no-optional              # 跳过可选依赖

# 生产环境安装
npm install --only=production
npm install --omit=dev                 # npm 7+

# 减少依赖树深度
npm dedupe                              # 去重依赖
npm ls --depth=0                        # 检查顶级依赖

镜像源配置

bash 复制代码
# 设置淘宝镜像
npm config set registry https://registry.npmmirror.com

# 设置官方镜像
npm config set registry https://registry.npmjs.org

# 临时使用镜像
npm install --registry https://registry.npmmirror.com

# 查看当前镜像源
npm config get registry

# 使用nrm管理镜像源
npm install -g nrm
nrm ls                                  # 列出可用镜像源
nrm use taobao                         # 切换到淘宝镜像
nrm test                               # 测试镜像源速度

npm 常用配置示例

.npmrc 配置文件示例

ini 复制代码
# 镜像源配置
registry=https://registry.npmmirror.com

# 缓存配置
cache=/Users/username/.npm-cache

# 安装配置
save-exact=true
package-lock=true

# 安全配置
audit-level=moderate

# 代理配置
proxy=http://proxy.company.com:8080
https-proxy=http://proxy.company.com:8080

# 私有包配置
@company:registry=https://npm.company.com

# 发布配置
access=public

package.json 脚本示例

json 复制代码
{
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js",
    "build": "webpack --mode production",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:coverage": "jest --coverage",
    "lint": "eslint src/",
    "lint:fix": "eslint src/ --fix",
    "format": "prettier --write src/",
    "clean": "rm -rf dist/",
    "prebuild": "npm run clean",
    "postbuild": "npm run test",
    "deploy": "npm run build && gh-pages -d dist"
  }
}

故障排除

常见问题解决

bash 复制代码
# 清理并重新安装
rm -rf node_modules package-lock.json
npm install

# 权限问题解决
sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) /usr/local/lib/node_modules

# 网络问题
npm config set proxy http://proxy:8080
npm config set strict-ssl false         # 不推荐,仅用于调试

# 版本冲突
npm ls                                  # 查看依赖树
npm dedupe                              # 去重依赖
npm shrinkwrap                          # 锁定依赖版本

调试信息

bash 复制代码
# 显示调试信息
npm install --verbose
npm install --loglevel verbose

# 显示详细错误
npm install --loglevel silly

# 查看npm配置路径
npm config get userconfig
npm config get globalconfig

常见问题及解决方案

1. 权限问题

Windows 权限问题

powershell 复制代码
# 以管理员身份运行PowerShell
# 设置执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Linux/macOS 权限问题

bash 复制代码
# 修复权限
sudo chown -R $(whoami) ~/.nvm
chmod +x ~/.nvm/nvm.sh

2. 环境变量配置问题

Windows 环境变量

cmd 复制代码
# 手动设置环境变量
setx NVM_HOME "C:\Users\%USERNAME%\AppData\Roaming\nvm"
setx NVM_SYMLINK "C:\Program Files\nodejs"
setx PATH "%PATH%;%NVM_HOME%;%NVM_SYMLINK%"

Linux/macOS 环境变量

bash 复制代码
# 检查配置文件
echo $NVM_DIR
which nvm

# 重新加载NVM
source ~/.nvm/nvm.sh

3. 网络连接问题

设置代理

bash 复制代码
# 设置npm代理
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

# 设置NVM代理
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/

使用国内镜像

bash 复制代码
# 设置淘宝镜像
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node/
export NVM_IOJS_ORG_MIRROR=https://npmmirror.com/mirrors/iojs/

4. 版本切换不生效

检查全局安装的 Node.js

bash 复制代码
# 卸载全局安装的Node.js
# Windows: 通过控制面板卸载
# Linux/macOS:
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/bin/npm

清理 PATH 环境变量

bash 复制代码
# 移除其他Node.js路径
echo $PATH | grep node

5. npm 包管理问题

全局包迁移

bash 复制代码
# 在新版本中重新安装全局包
npm list -g --depth=0 > global-packages.txt
npm install -g $(cat global-packages.txt | grep -v npm | awk '{print $2}' | cut -d@ -f1)

手动安装 Node.js

Windows 手动安装

方法一:官方安装包

  1. 下载安装包

    • 访问 Node.js 官网
    • 选择 LTS 版本或 Current 版本
    • 下载 Windows Installer (.msi)
  2. 安装过程

    diff 复制代码
    - 运行.msi文件
    - 接受许可协议
    - 选择安装路径(建议默认)
    - 选择组件(建议全选)
    - 完成安装
  3. 验证安装

    cmd 复制代码
    node --version
    npm --version

方法二:便携版安装

  1. 下载便携版

    diff 复制代码
    - 下载Windows Binary (.zip)
    - 解压到指定目录
  2. 配置环境变量

    cmd 复制代码
    # 添加到PATH
    setx PATH "%PATH%;C:\path\to\node"

Linux 手动安装

方法一:包管理器安装

bash 复制代码
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

# CentOS/RHEL
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs

# Arch Linux
sudo pacman -S nodejs npm

方法二:二进制包安装

bash 复制代码
# 下载二进制包
wget https://nodejs.org/dist/v18.17.0/node-v18.17.0-linux-x64.tar.xz

# 解压
tar -xJf node-v18.17.0-linux-x64.tar.xz

# 创建符号链接
sudo ln -s /path/to/node-v18.17.0-linux-x64/bin/node /usr/local/bin/node
sudo ln -s /path/to/node-v18.17.0-linux-x64/bin/npm /usr/local/bin/npm

macOS 手动安装

方法一:官方安装包

bash 复制代码
# 下载并安装.pkg文件
# 从官网下载macOS Installer (.pkg)

方法二:Homebrew 安装

bash 复制代码
# 安装Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装Node.js
brew install node

# 安装特定版本
brew install node@16

最佳实践建议

1. 版本选择策略

  • 生产环境:使用 LTS 版本,确保稳定性
  • 开发环境:可使用 Current 版本体验新特性
  • 团队协作 :统一 Node.js 版本,使用.nvmrc文件

2. 项目版本管理

bash 复制代码
# 创建.nvmrc文件
echo "18.17.0" > .nvmrc

# 使用项目指定版本
nvm use

# 自动切换版本(需要配置)
# 在.bashrc或.zshrc中添加
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

3. 全局包管理

bash 复制代码
# 列出全局包
npm list -g --depth=0

# 保存全局包列表
npm list -g --depth=0 --json > global-packages.json

# 在新版本中恢复全局包
# 解析JSON并安装包

4. 性能优化

bash 复制代码
# 使用更快的镜像源
npm config set registry https://registry.npmmirror.com

# 使用yarn替代npm
npm install -g yarn
yarn config set registry https://registry.npmmirror.com

5. 安全考虑

bash 复制代码
# 定期更新npm
npm install -g npm@latest

# 检查安全漏洞
npm audit
npm audit fix

# 使用npm ci进行生产环境安装
npm ci --only=production

6. 开发环境配置

bash 复制代码
# 配置npm初始化默认值
npm config set init.author.name "Your Name"
npm config set init.author.email "your.email@example.com"
npm config set init.license "MIT"

# 设置npm缓存目录
npm config set cache /path/to/npm-cache

故障排除指南

诊断命令

bash 复制代码
# 检查NVM状态
nvm --version
nvm current
nvm ls

# 检查Node.js和npm
node --version
npm --version
which node
which npm

# 检查环境变量
echo $PATH
echo $NVM_DIR

# 检查npm配置
npm config list
npm config get registry

常见错误及解决

  1. "nvm: command not found"

    • 检查安装是否成功
    • 重新加载 shell 配置文件
    • 检查环境变量配置
  2. 版本切换失败

    • 检查是否有其他 Node.js 安装
    • 清理 PATH 中的冲突路径
    • 重启终端
  3. 权限错误

    • 使用管理员权限
    • 修复文件权限
    • 检查防火墙设置

结语

Node.js 版本管理是现代 JavaScript 开发的重要技能。通过合理使用 NVM 等版本管理工具,可以显著提高开发效率和项目稳定性。建议在实际项目中建立规范的版本管理流程,确保团队协作的一致性。

记住以下关键点:

  • 生产环境优先使用 LTS 版本
  • 使用.nvmrc文件管理项目版本
  • 定期更新和维护开发环境
  • 关注安全更新和最佳实践
相关推荐
小高0071 小时前
🌐ES6 这 8 个隐藏外挂,知道 3 个算我输!
前端·javascript·面试
Alan521591 小时前
Java 后端实现基于 JWT 的用户认证和权限校验(含代码讲解)
前端·后端
RoyLin1 小时前
TypeScript设计模式:策略模式
前端·后端·typescript
brzhang2 小时前
为什么说低代码谎言的破灭,是AI原生开发的起点?
前端·后端·架构
小桥风满袖2 小时前
极简三分钟ES6 - ES9中字符串扩展
前端·javascript
小Wang3 小时前
npm私有库创建(docker+verdaccio)
前端·docker·npm
用户73087011793083 小时前
Vue中集成文字转语音:使用Web Speech API实现功能
前端
李重楼3 小时前
前端性能优化之 HTTP/2 多路复用
前端·面试
yanessa_yu3 小时前
全屏滚动网站PC端自适应方案
前端