npkill - 一个清理 npm 包的神器

1- 🌟 核心功能

npkill 是一款专为清理冗余 node_modules 设计的命令行工具,通过可视化交互界面智能扫描算法,帮助开发者快速定位并删除无用依赖目录。其核心优势包括:

  • 智能扫描:基于 TypeScript 实现底层快速搜索,支持从任意目录或全局范围递归查找 node_modules
  • 依赖对比:通过分析 package.jsonpackage-lock.json,识别未使用的模块。
  • 轻量安全:仅 3MB 大小,删除前显示目录大小、路径及最后修改时间,避免误删关键文件。

2- 🛠️ 安装方法

  1. 全局安装(推荐)

    npm install -g npkill  # 使用 npm
    pnpm add -g npkill     # 使用 pnpm(更节省空间)
    
  2. 临时使用(无需安装)

    npx npkill  # 自动下载并运行最新版本
    

3- 🖥️ 基础使用步骤

  1. 启动扫描

    cd ~/projects  # 进入目标目录
    npkill          # 从当前目录开始扫描
    
    • 指定起始目录:npkill -d ~/dev
    • 全局扫描:npkill --full(从用户根目录开始)
  2. 交互式操作

    • 移动光标:↑/↓ 或 j/k 键选择目录。
    • 删除目录:按空格键确认删除(不可逆操作)。
    • 退出程序:按 qCtrl+C

4- 🔧 高级参数与场景

参数 功能说明 示例
-E, --exclude 排除指定目录(逗号分隔,需用双引号包裹) npkill -E "temp, backup"7
-t, --target 清理其他目录(如 dist.cache npkill -t dist51
-c, --bg-color 自定义高亮颜色(支持 blue/red/cyan 等) npkill -c red51
-s, --sort 按目录大小或路径排序(Beta 功能) npkill -s size51
-gb 以 GB 为单位显示目录大小(默认 MB) npkill -gb51

5- ⚙️ 技术原理

  1. 依赖树分析
    npkill 会读取项目的 package.json 和锁定文件(如 package-lock.json),生成实际使用的模块列表,并与 node_modules 中的内容对比,标记未使用的依赖 。
  2. 异步 I/O 优化
    利用 Node.js 非阻塞特性,并行扫描多个目录,提升效率 。

6- ⚠️ 关键注意事项

  1. 系统目录保护
    若扫描到系统关键目录(如 /usr/lib/node_modules),界面会显示警告图标❌,切勿删除以免破坏环境 。
  2. 权限问题
    删除某些目录可能需要管理员权限,建议在命令行工具中以管理员身份运行(Windows:右键选择 " 以管理员身份运行 ")。
  3. 备份与恢复
    • 删除前可通过 npm ls 查看依赖树,确认是否误标 40
    • 误删后可通过 npm installpnpm install 重新安装依赖。
  4. 性能优化
    若项目过多导致卡顿,使用 -E 排除非目标目录(如测试环境 test)。

7- 🔄 替代方案与扩展

  1. pnpm
    使用硬链接全局复用依赖,从源头减少 node_modules 体积 50

  2. 手动清理缓存

    npm cache clean --force  # 清理 npm 缓存(非 node_modules)
    
  3. rimraf
    快速删除单个目录(适合已知路径):

    npx rimraf node_modules  # 强制删除当前目录的 node_modules
    

8- 📝 总结

npkill 是 Node.js 开发者必备的 " 空间救星 ",尤其适合以下场景:

  • 🗑️ 清理陈旧项目:快速释放数十 GB 磁盘空间。
  • 🚀 优化构建速度:减少 CI/CD 流程中冗余依赖的传输时间。
  • 🔍 依赖审计:辅助检查项目中是否存在无用或过时依赖。

通过灵活参数组合和交互式操作,既能精准清理,又能避免误操作。建议搭配 pnpm 使用,从依赖安装机制上实现长期优化。