返回资讯中心
外部精选
软件工程
#开发者实时流

开发者工具 dev-prune 发布:只删除可重建的缓存目录以释放磁盘空间

来源标题:Show HN: Dev-prune, a disk cleaner that only deletes what it can rebuild

开发者 VKrishna04 发布开源磁盘清理工具 dev-prune,可扫描用户注册的所有 Git 仓库,删除 node_modules、.venv、target、vendor 等可重建目录,但前提是确认对应命令能成功还原。该工具用 Rust 编写,支持 36 种包管理器,涵盖 npm、pip 以及 Composer、Bundler、Terraform 等,采用 Apache-2.0 许可,可在 Windows、macOS 和 Linux 上运行。

Hacker News 最新VKrishna042026/11/10 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

GB 级别的空间回来了。删掉的全都能重建。

回收闲置仓库占用的磁盘空间——而且绝不会删掉 lockfile 无法还原的内容。

网站 · 文档 · CLI 参考 · 安全约束 · 更新日志

devp 是同一个二进制文件的短名称 · Windows、macOS 和 Linux · Apache-2.0 · 作者 VKrishna04

dev-prune 正在清理它自己 13 GiB 的 target/,然后将其恢复。node_modules 会被重新安装;cargo 会在你下次构建时重建 target/。这是真实的二进制文件,在一个一次性克隆中运行;两段漫长的等待已被剪掉。录制过程。

node_modules、.venv、target 和 vendor 是大多数开发者机器上最大的目录,也是价值最低的:其中的每一个字节都由一个已经提交的 lockfile 描述。一个你从三月起就没打开过的项目,正为一个你根本没在运行的构建扣押着数 GB 空间。

dev-prune 会在你注册的每一个 Git 仓库中找到这些目录并删除它们——但只有在证明用于恢复它们的那条确切命令能够成功之后。它认识三十六种包管理器,而不仅仅是显而易见的那四种:Composer、Bundler、Mix、CocoaPods 和 Terraform 与 npm 和 pip 一样享受同等待遇。它是一个 Rust 程序,会安装自己的后台计划任务,并响应你输入的三个名字——dev-prune 和 devp——以及第三个无窗口构建 devpw,它存在的唯一目的就是让 Windows 计划任务运行时不会闪出控制台窗口。

删除只是其中一半。同一个二进制文件会把一切放回去(devp restore --last-run),统计并清理那些包管理器在项目之外保留的缓存(devp caches),报告 Docker 占用了什么(devp caches docker),并逐个驱动器展示磁盘空间实际去了哪里(devp status、devp stats)。一个工具处理机器上所有依赖目录,而不是每个生态一个命令,再靠脑子记住哪些是安全的。

整个工具围绕的规则:除非 dev-prune 刚刚以只读方式验证过其 lockfile 能够重建,否则什么都不会被删除。没有任何标志可以跳过这项检查。--ignore-idle 只解除空闲天数等待,仅此而已。

上面那段视频的后半部分,正是让删除变得可以放心尝试的关键。一轮清理之后,devp restore --last-run 会精确重建该轮清理所删除的目录,覆盖它触及的每一个仓库,使用每个项目自己的包管理器(npm ci、pnpm install --frozen-lockfile、uv sync 等等)。devp restore . 对单个项目做同样的事。视频展示了 node_modules 从 lockfile 恢复;Rust 的 target/ 目录不会被重新安装,cargo 会在你下次构建时重建它们。

这就是为什么验证要放在最前面。一个目录只有在它的恢复命令刚刚被证明可用时才会被删除,所以一次无法成功的恢复,就等于一次从未发生的清理。devp history --pass N 会列出每一轮清理删除了什么,如果你想在恢复前先看看的话。完整参考见 devp restore。

从这里开始 安装 · 发布渠道 · 编辑器 · 60 秒导览 · 界面预览 · 演进历程

设计思路 为什么安全 · 功能 · 命令 · 生态系统 · Monorepo · JavaScript · Python

运行它 配置 · 自动化 · 对比 · 架构 · 文档

一行命令

选择你实际正在输入的 shell 所对应的那一行。把第一行粘贴到命令提示符中,是最常见的安装失败方式——它会返回 'sh' 不是内部或外部命令,因为 sh 是 Unix shell,而 Windows 并不自带。

Linux、macOS,或 Windows 上的 Unix shell——Git Bash、MSYS2、Cygwin、WSL:

curl -fsSL https://devprune.vkrishna04.me/install.sh | sh

Windows PowerShell——蓝色或黑色的 PS> 提示符,以及 Windows Terminal 的默认环境:

iwr -useb https://devprune.vkrishna04.me/install.ps1 | iex

Windows 命令提示符——C:> 提示符,它自身没有 iwr:

powershell -NoProfile -ExecutionPolicy Bypass -Command "iwr -useb https://devprune.vkrishna04.me/install.ps1 | iex"

这三种方式都会下载适用于你平台的预编译二进制文件,验证其公布的 SHA-256,将其加入 PATH,并运行 dev-prune setup。传入 --no-auto-setup / -NoAutoSetup 可跳过最后一步。

手动下载并运行的二进制文件则会先询问:第一次有人值守运行时会在安装任何东西之前打开设置向导,完成向导就是同意,退出向导则意味着什么都不安装——持久生效,直到你用 devp setup 另行表示。

随时可以重新运行其中任何一条。如果安装已经是最新、完整且在 PATH 中,则保持原样并以 0 退出,不会下载;较旧的版本会就地更新;较新的版本不会被降级。--force / -Force 会强制重新写入。

命令提示符形式与 PowerShell 形式的安装效果相同,但 cmd 无法继承安装程序在其自身进程中设置的 PATH,因此 devp 会在你下次打开命令提示符时才能解析,而不是当前这个。PowerShell 没有这个问题。

npm install -g dev-prune@latest # 或:npx dev-prune status bun add -g dev-prune@latest # 同一个包,通过 bun pnpm add -g dev-prune@latest yarn global add dev-prune@latest # Yarn 1.x uv tool install dev-prune@latest # 或:uvx dev-prune status pipx install --force dev-prune pip install --upgrade dev-prune cargo binstall dev-prune # 获取预编译的发布归档 cargo install dev-prune # 从源码构建,需要 Rust 1.88+

每条命令都会安装最新版本并更新已有副本——同一行命令对两者都适用。这就是 @latest、--force 和 --upgrade 这些写法的用途:裸形式会报告“已安装”且不做任何更改,看起来像更新,其实不是。(cargo install 在存在更新版本时会自行重建。)

npm 和 PyPI 包中包含二进制文件——安装时没有下载步骤,因此它们可以在 npm ci --ignore-scripts 下、在注册表镜像之后以及离线环境中工作。除 cargo install 外,所有方式都提供预编译的可执行文件。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →