本文目录导读:

- 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
根据你的项目类型选择合适的工具,建议先从只报告不删除的模式开始,确认无误后再执行清理操作。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播