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 的优势
- 版本切换:快速切换不同 Node.js 版本
- 项目隔离:不同项目使用不同 Node.js 版本
- 测试兼容性:测试代码在多个版本下的兼容性
- 简化升级:轻松升级或降级 Node.js 版本
NVM 工具对比
工具 | 平台支持 | 特点 |
---|---|---|
nvm | Linux/macOS | 原生 bash 脚本,功能完整 |
nvm-windows | Windows | Windows 专用版本 |
fnm | 跨平台 | Rust 编写,速度快 |
n | Linux/macOS | 简单轻量 |
NVM 安装指南
Windows 系统安装
方法一:使用 nvm-windows
-
下载安装包
bash# 访问GitHub下载最新版本 https://github.com/coreybutler/nvm-windows/releases
-
运行安装程序
- 下载
nvm-setup.zip
- 解压并运行
nvm-setup.exe
- 按提示完成安装
- 下载
-
验证安装
cmdnvm 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 手动安装
方法一:官方安装包
-
下载安装包
- 访问 Node.js 官网
- 选择 LTS 版本或 Current 版本
- 下载 Windows Installer (.msi)
-
安装过程
diff- 运行.msi文件 - 接受许可协议 - 选择安装路径(建议默认) - 选择组件(建议全选) - 完成安装
-
验证安装
cmdnode --version npm --version
方法二:便携版安装
-
下载便携版
diff- 下载Windows Binary (.zip) - 解压到指定目录
-
配置环境变量
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
常见错误及解决
-
"nvm: command not found"
- 检查安装是否成功
- 重新加载 shell 配置文件
- 检查环境变量配置
-
版本切换失败
- 检查是否有其他 Node.js 安装
- 清理 PATH 中的冲突路径
- 重启终端
-
权限错误
- 使用管理员权限
- 修复文件权限
- 检查防火墙设置
结语
Node.js 版本管理是现代 JavaScript 开发的重要技能。通过合理使用 NVM 等版本管理工具,可以显著提高开发效率和项目稳定性。建议在实际项目中建立规范的版本管理流程,确保团队协作的一致性。
记住以下关键点:
- 生产环境优先使用 LTS 版本
- 使用
.nvmrc
文件管理项目版本 - 定期更新和维护开发环境
- 关注安全更新和最佳实践