如何用脚本批量更新依赖版本?

wen 实用脚本 2

本文目录导读:

如何用脚本批量更新依赖版本?

  1. npm-check-updates (最常用)
  2. npm update 命令
  3. yarn upgrade 命令
  4. pnpm update 命令
  5. 批量更新脚本 (Node.js)
  6. 批量更新特定类型依赖
  7. 自动化脚本 (Linux/Mac)
  8. 使用 CI/CD 自动更新
  9. 安全更新建议
  10. 批量更新 Monorepo
  11. 最佳实践建议

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

最佳实践建议

  1. 先备份: 更新前备份 package.jsonpackage-lock.json
  2. 逐步更新: 先更新次要版本,测试通过后再更新主版本
  3. 使用版本范围:
    {
    "dependencies": {
     "lodash": "^4.17.21",  // 允许次要版本更新
     "react": "~18.2.0"     // 只允许补丁版本更新
    }
    }
  4. 创建分支测试: 在单独分支上更新并测试
  5. 使用版本锁定: 生产环境建议锁定版本

选择哪种方法取决于你的具体需求:

  • 快速更新:使用 ncu -u
  • 安全更新:使用 npm audit fix
  • 精细控制:使用脚本批量处理

抱歉,评论功能暂时关闭!