本文目录导读:

- npm-check-updates (最常用)
- npm update 命令
- yarn upgrade 命令
- pnpm update 命令
- 批量更新脚本 (Node.js)
- 批量更新特定类型依赖
- 自动化脚本 (Linux/Mac)
- 使用 CI/CD 自动更新
- 安全更新建议
- 批量更新 Monorepo
- 最佳实践建议
npm-check-updates (最常用)
安装
npm install -g npm-check-updates
使用命令
# 检查可更新的依赖 ncu # 更新所有依赖到最新版本 ncu -u # 更新到最新的次要版本(不破坏性更新) ncu -u --target minor # 更新到最新的补丁版本 ncu -u --target patch # 更新指定依赖 ncu -u axios lodash
脚本示例 (package.json)
{
"scripts": {
"update-deps": "ncu -u && npm install",
"update-safe": "ncu -u --target minor && npm install"
}
}
npm update 命令
# 更新所有依赖到符合 semver 的最新版本 npm update # 更新指定包 npm update lodash axios # 更新生产依赖 npm update --production
yarn upgrade 命令
# 更新所有依赖 yarn upgrade # 更新到最新版本 yarn upgrade --latest # 更新指定包 yarn upgrade lodash
pnpm update 命令
# 更新所有依赖 pnpm update # 更新到最新版本 pnpm update --latest
批量更新脚本 (Node.js)
// update-deps.js
const { execSync } = require('child_process');
const fs = require('fs');
async function updateDependencies() {
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies };
console.log('当前依赖版本:');
Object.entries(dependencies).forEach(([name, version]) => {
console.log(` ${name}: ${version}`);
});
// 使用 ncu 更新
console.log('\n正在更新依赖...');
execSync('ncu -u', { stdio: 'inherit' });
execSync('npm install', { stdio: 'inherit' });
console.log('依赖更新完成!');
}
updateDependencies();
批量更新特定类型依赖
# 只更新 devDependencies ncu -u --dev # 只更新 dependencies ncu -u --prod # 排除某些包 ncu -u --reject "react,react-dom" # 只更新特定的包 ncu -u --filter "react-*"
自动化脚本 (Linux/Mac)
#!/bin/bash # update-all-deps.sh echo "=== 开始更新依赖 ===" # 检查是否有 package.json if [ ! -f "package.json" ]; then echo "错误: 未找到 package.json" exit 1 fi # 备份原始文件 cp package.json package.json.backup # 更新依赖 ncu -u if [ $? -eq 0 ]; then echo "依赖版本更新成功" # 安装更新后的依赖 npm install echo "=== 更新完成 ===" else echo "更新失败,恢复原始文件" mv package.json.backup package.json exit 1 fi
使用 CI/CD 自动更新
GitHub Actions 示例
name: Update Dependencies
on:
schedule:
- cron: '0 0 * * 1' # 每周一运行
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Update dependencies
run: |
npx npm-check-updates -u
npm install
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
title: 'chore: update dependencies'
body: '自动更新依赖版本'
安全更新建议
# 只更新修复安全漏洞的版本 npm audit fix # 强制更新修复安全漏洞 npm audit fix --force # 使用 ncu 但只更新补丁版本 ncu -u --target patch
批量更新 Monorepo
# 对于 Lerna 项目 lerna exec -- ncu -u && lerna bootstrap # 对于 Yarn Workspaces yarn workspaces run ncu -u # 对于 pnpm Workspaces pnpm -r exec ncu -u
最佳实践建议
- 先备份: 更新前备份
package.json和package-lock.json - 逐步更新: 先更新次要版本,测试通过后再更新主版本
- 使用版本范围:
{ "dependencies": { "lodash": "^4.17.21", // 允许次要版本更新 "react": "~18.2.0" // 只允许补丁版本更新 } } - 创建分支测试: 在单独分支上更新并测试
- 使用版本锁定: 生产环境建议锁定版本
选择哪种方法取决于你的具体需求:
- 快速更新:使用
ncu -u - 安全更新:使用
npm audit fix - 精细控制:使用脚本批量处理