实用脚本能自动清理无用的依赖包吗?

wen 实用脚本 1

本文目录导读:

实用脚本能自动清理无用的依赖包吗?

  1. Node.js (npm/yarn/pnpm)
  2. Python (pip/poetry/conda)
  3. Go (Go Modules)
  4. Java (Maven/Gradle)
  5. 通用跨语言脚本
  6. 重要提示
  7. 推荐最小化方案

是的,有多个实用脚本和工具可以自动清理项目中无用的依赖包,以下针对不同包管理器和语言提供具体方案:

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

重要提示

  1. 谨慎操作:自动删除可能导致构建失败,建议先执行 --dry-run 或查看报告再手动确认
  2. 保留开发依赖:区分 dependenciesdevDependencies
  3. 版本锁定:清理后建议运行测试确保功能正常
  4. 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

根据你的项目类型选择合适的工具,建议先从只报告不删除的模式开始,确认无误后再执行清理操作。

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