本文目录导读:

- Node.js (npm/yarn/pnpm)
- Python (pip/poetry/conda)
- Go (Go Modules)
- Java (Maven/Gradle)
- 通用跨语言脚本
- 重要提示
- 推荐最小化方案
是的,有多个实用脚本和工具可以自动清理项目中无用的依赖包,以下针对不同包管理器和语言提供具体方案:
Node.js (npm/yarn/pnpm)
使用 depcheck 工具
# 全局安装 npm install -g depcheck # 在项目目录运行 depcheck
输出会列出:未使用的依赖、缺少的依赖等。
使用 npm-check 交互式清理
npm install -g npm-check # 在项目中运行(交互式界面,可选择删除无用包) npm-check
自动化脚本(bash)
#!/bin/bash
# 清理未使用的依赖包
# 先安装 depcheck 和 npm-check
echo "扫描未使用的依赖..."
npx depcheck --json > unused.json
# 如果是 yarn 项目
if [ -f "yarn.lock" ]; then
echo "yarn 项目,建议手动检查"
else
echo "npm 项目,使用 npm prune"
npm prune
fi
# 更激进的清理(谨慎使用)
# 读取 unused.json 并自动执行卸载
# node -e "
# const unused = require('./unused.json').dependencies;
# if (unused.length) {
# console.log('卸载:', unused.join(' '));
# require('child_process').execSync('npm uninstall ' + unused.join(' '));
# }
# "
Python (pip/poetry/conda)
使用 pip-autoremove
# 安装 pip install pip-autoremove # 自动移除包及其依赖(不删除其他包需要的依赖) pip-autoremove some-package -y # 列出所有可移除的依赖 pip-autoremove --list
使用 pipenv clean
# 如果使用 pipenv pipenv clean # 会自动卸载 Pipfile.lock 中不存在的包
自动化脚本
#!/bin/bash # Python 无依赖清理脚本 pip freeze > installed.txt # 生成 requirements.txt 后对比 # 或者用 pipdeptree 显示依赖树 pip install pipdeptree pipdeptree --warn silence | grep -E '^\w+' > direct.txt # 找出未使用的包(需要手动确认) comm -23 <(sort installed.txt) <(sort direct.txt)
Go (Go Modules)
使用 go mod tidy
# 最标准的清理方式 go mod tidy # 会添加缺失的依赖,移除未使用的依赖 # 同时更新 go.mod 和 go.sum
查看未使用的依赖
go mod graph | unused # 或者 go list -m all > all.txt go list -m -json all | jq 'select(.Replace)' # 查看被替换的包
Java (Maven/Gradle)
Maven 依赖清理
# 显示依赖树 mvn dependency:tree # 分析未使用的依赖(需要添加插件) mvn dependency:analyze # 输出 "Unused declared dependencies" 列表
自动化脚本:
#!/bin/bash
# 基于 mvn dependency:analyze 输出自动移除
mvn dependency:analyze | grep -E 'Unused declared dependencies' -A 100 | \
grep -E '^\s+\S+' | awk '{print $1":"$2}' | while read dep; do
echo "考虑移除: $dep"
# 这需要手动处理,因为 Maven 不支持命令行直接移除
done
Gradle 依赖清理
# 显示依赖树 gradle dependencies # 使用 Gradle 的 build scan 查看 # 或用插件: gradle-lint-plugin
通用跨语言脚本
Bash 通用清理助手
#!/bin/bash
# 通用依赖清理脚本
clean_node() {
[ -f "package.json" ] && { npx depcheck; npm prune; }
}
clean_python() {
[ -f "requirements.txt" ] && { pip install pip-autoremove; pip-autoremove --list; }
[ -f "Pipfile" ] && { pipenv clean; }
}
clean_go() {
[ -f "go.mod" ] && go mod tidy
}
clean_rust() {
[ -f "Cargo.toml" ] && cargo update
}
# 根据项目类型自动执行
if [ -f "package.json" ]; then clean_node; fi
if [ -f "requirements.txt" ] || [ -f "Pipfile" ]; then clean_python; fi
if [ -f "go.mod" ]; then clean_go; fi
if [ -f "Cargo.toml" ]; then cargo +nightly udeps; fi
重要提示
- 谨慎操作:自动删除可能导致构建失败,建议先执行
--dry-run或查看报告再手动确认 - 保留开发依赖:区分
dependencies和devDependencies - 版本锁定:清理后建议运行测试确保功能正常
- CI/CD 集成:可以将 lint 检查集成到 CI 流程(如
depcheck作为 pre-commit hook)
推荐最小化方案
# Node.js 项目快速清理 npm install -g depcheck depcheck --json | jq .dependencies[] -r | xargs npm uninstall # Python 项目 pip install pip-autoremove # 手动指定要移除的包 pip-autoremove package_name -y # Go 项目(最简单) go mod tidy
根据你的项目类型选择合适的工具,建议先从只报告不删除的模式开始,确认无误后再执行清理操作。