本文目录导读:

- Node.js (package.json)
- Python (requirements.txt)
- Java (Maven - pom.xml)
- Java (Gradle - build.gradle)
- 通用批量更新脚本
- 安全批量更新策略
- 自动化更新工具
- 最佳实践
Node.js (package.json)
使用 npm-check-updates
# 安装 npm install -g npm-check-updates # 检查所有依赖的更新 ncu # 更新所有依赖到最新版本 ncu -u # 更新到指定版本类型 ncu --target minor # 只更新小版本 ncu --target patch # 只更新补丁版本 # 更新后重新安装 npm install
使用 npm-upgrade
npx npm-upgrade
批量更新脚本
// update-deps.js
const { execSync } = require('child_process');
const fs = require('fs');
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
Object.keys(deps).forEach(pkg => {
try {
execSync(`npm install ${pkg}@latest`, { stdio: 'inherit' });
console.log(`✅ Updated ${pkg}`);
} catch (error) {
console.error(`❌ Failed to update ${pkg}`);
}
});
Python (requirements.txt)
使用 pip-review
# 安装 pip install pip-review # 列出可更新的包 pip-review --local # 自动更新所有包 pip-review --auto # 交互式更新 pip-review --interactive
使用 pip-upgrader
# 安装 pip install pip-upgrader # 更新所有包 pip-upgrade # 更新指定包 pip-upgrade django requests
批量更新脚本
# update_python_deps.py
import subprocess
import re
def get_outdated_packages():
result = subprocess.run(['pip', 'list', '--outdated', '--format=columns'],
capture_output=True, text=True)
packages = []
for line in result.stdout.strip().split('\n')[2:]:
if line.strip():
pkg = line.split()[0]
packages.append(pkg)
return packages
def update_packages(packages):
for pkg in packages:
try:
subprocess.run(['pip', 'install', '--upgrade', pkg], check=True)
print(f"✅ Updated {pkg}")
except subprocess.CalledProcessError:
print(f"❌ Failed to update {pkg}")
if __name__ == "__main__":
outdated = get_outdated_packages()
if outdated:
print(f"Found {len(outdated)} outdated packages")
update_packages(outdated)
else:
print("All packages are up to date!")
Java (Maven - pom.xml)
使用 versions-maven-plugin
<!-- pom.xml 添加插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.16.0</version>
</plugin>
# 检查更新 mvn versions:display-dependency-updates # 更新到最新版本 mvn versions:use-latest-releases # 更新到最新快照 mvn versions:use-latest-snapshots # 更新属性中定义的版本 mvn versions:update-properties
Java (Gradle - build.gradle)
# 检查依赖更新 gradle dependencyUpdates # 需要添加插件
在 build.gradle 中添加:
plugins {
id 'com.github.ben-manes.versions' version '0.50.0'
}
通用批量更新脚本
Bash 脚本
#!/bin/bash
# update_all_deps.sh
# Node.js
if [ -f "package.json" ]; then
echo "📦 Updating Node.js dependencies..."
npx npm-check-updates -u
npm install
fi
# Python
if [ -f "requirements.txt" ]; then
echo "🐍 Updating Python dependencies..."
pip install --upgrade pip
pip-review --auto
fi
# Ruby
if [ -f "Gemfile" ]; then
echo "💎 Updating Ruby dependencies..."
bundle update
fi
# PHP
if [ -f "composer.json" ]; then
echo "🐘 Updating PHP dependencies..."
composer update
fi
echo "✅ All dependencies updated!"
安全批量更新策略
#!/bin/bash
# safe_update.sh
# 备份原文件
backup_file() {
if [ -f "$1" ]; then
cp "$1" "$1.backup"
echo "📦 Backup created: $1.backup"
fi
}
# 回滚
rollback() {
if [ -f "$1.backup" ]; then
cp "$1.backup" "$1"
echo "↩️ Rolled back: $1"
fi
}
# 示例:更新 npm 包
update_deps_safe() {
backup_file "package.json"
backup_file "package-lock.json"
# 执行更新
npx npm-check-updates -u
# 运行测试
npm test
if [ $? -eq 0 ]; then
echo "✅ Tests passed, updates are safe"
else
echo "❌ Tests failed, rolling back..."
rollback "package.json"
rollback "package-lock.json"
fi
}
自动化更新工具
Dependabot (GitHub)
在 .github/dependabot.yml 中配置:
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
Renovate
{
"extends": ["config:base"],
"automerge": true,
"schedule": ["every weekend"]
}
最佳实践
- 分批更新:不要一次更新所有包
- 版本锁定:使用 lock 文件(package-lock.json, requirements.txt 等)
- 测试先行:更新后运行测试套件
- 版本控制:更新前创建 git 分支
- 监控变更:查看 changelog 了解破坏性变更
选择哪种方式取决于你的技术栈和项目需求。