Levo 指南 · 开发者:其他工具

如何在 Mac 上查找并删除所有 node_modules 文件夹

每个 node_modules 文件夹都可以删除。npm install、pnpm install 或 yarn 会根据锁定文件重新生成它。唯一的问题是哪些值得花时间重装,答案通常是你一个月没打开过的项目。

Levo 的 Ready to free 列表,列出 node_modules 文件夹和包缓存,每项都有大小和原因
内容位置能安全删除吗?
项目依赖<project>/node_modules可以,install 会重新生成
嵌套的副本node_modules/*/node_modules别动,它们会随上级文件夹一起消失
链接的包npm link 创建的符号链接删除链接,不要删除它所指向的源文件
全局包/opt/homebrew/lib/node_modules,或你的 Node 版本的 lib不能,那些是你特意安装的工具

为什么有这么多

每个 JavaScript 项目都保存着自己的每一个依赖的副本,大多数还保存着依赖的依赖。一个小型 React 应用轻松就有 300 MB,一个 monorepo 可能超过 2 GB。几年下来的个人项目、教程和克隆的仓库累积起来有几十 GB,而你从没想过它们,因为这些文件夹都藏在你只是偶尔才打开的项目里。

自己动手清理

全部找出来

打开终端,列出个人文件夹下的每个 node_modules 文件夹,最大的排在最后。-prune 会阻止 find 进入每一个文件夹内部,这正是它速度快的原因。

find ~ -name node_modules -type d -prune -not -path "*/Library/*" -exec du -sh {} + 2>/dev/null | sort -h | tail -30

列表会显示大小和路径。~/Library 下的内容会被有意跳过:编辑器和 Electron 工具之类的 App 会在那里保存自己的副本,那些不该由你来删。App 包内部的文件夹同理。

删除某个项目的文件夹

cd ~/Developer/old-project
rm -rf node_modules

这是永久删除:rm 不会经过废纸篓。按回车之前请先核对路径。如果你希望能够撤销,可以改为在访达中把文件夹拖到废纸篓,不过访达移动一个包含 50,000 个小文件的文件夹可能要花很长时间。

用 npkill 一次删除多个

npkill 会扫描一个文件夹,列出每个 node_modules 及其大小和最后修改日期,并让你用方向键和空格键来删除。无需安装它。

cd ~/Developer
npx npkill

可以按大小或最后修改时间排序,然后从上往下处理。最后修改时间这一列最有用:一年没动过的文件夹,删掉基本稳妥。

哪些项目要跳过

使用 pnpm 时,node_modules 大部分是指向同一个共享存储的链接,所以删除项目文件夹释放的空间比 du 显示的要少。只有在没有任何东西链接到这些文件时才会释放,而且还要在运行 pnpm store prune 之后。参见如何清理 npm、pnpm、Yarn 和 Bun 缓存。

另外值得看一看

除了 node_modules,项目还会留下构建产物:.next、.nuxt、dist、.turbo、.parcel-cache。下次构建会重新生成它们,但在删除 dist 之前,请确认它没有提交到 git,因为有些项目是有意发布它的。Python 项目也会留下各自的大文件夹,详见如何查找并删除旧的 Python 虚拟环境。

Levo 怎么做

Levo 为占用磁盘的内容维护着一个实时索引,所以它已经知道每个 node_modules 在哪里、有多大。它们会出现在 Ready to free 的项目依赖下,每项都有大小和原因,和你的包缓存放在一起。

判断由你自己的 AI 智能体来做。它会读取每个项目并判断是否闲置,只有当文件夹里没有任何东西在运行时,Levo 才会勾选它:没有开发服务器,没有打开的文件,没有编程智能体会话。你今天早上动过的项目不会被勾选。智能体只能读取。删除由 Levo 自己执行,并且在每个文件夹被删除前会再检查一遍。

你选择一个清理级别,点击 Select › Smartly,取消勾选想保留的项目,然后点击 Clean up。开启 Move to Trash 后,你可以把文件夹放回原处。设置方法见面向 Web 开发者的 Levo。监视和建议是免费的,两次清理也是免费的,之后是终身许可证。

常见问题

node_modules 占用多少空间?

视项目而定。小型应用通常是 200 到 400 MB,大型 monorepo 可能超过 2 GB。几年的项目累积下来,大多数开发者会发现有 10 到 50 GB 分散在几十个文件夹里。

删除 node_modules 会破坏我的项目吗?

不会。下次运行 npm install、pnpm install 或 yarn 时,这个文件夹会根据你的锁定文件重新生成。项目的源文件不会被碰。例外情况是文件夹内被手动编辑过的文件,以及已从 npm 下架的包。

开发服务器运行时删除 node_modules 安全吗?

别这样做。服务器可能崩溃或返回损坏的页面,文件监视器也可能在删除到一半时出错。请先停止服务器。

为什么 rm -rf node_modules 这么慢?

一个文件夹就可能包含 5 万到 20 万个小文件,每个都要单独删除。磁盘快满时会更慢。在终端中删除比在访达中把文件夹移到废纸篓快得多。

我也需要删除锁定文件吗?

不需要。请保留 package-lock.json、pnpm-lock.yaml 或 yarn.lock。它是让重装得到相同版本的依据。