Levo 指南 · 开发者:其他工具
如何在 Mac 上查找并删除所有 node_modules 文件夹
每个 node_modules 文件夹都可以删除。npm install、pnpm install 或 yarn 会根据锁定文件重新生成它。唯一的问题是哪些值得花时间重装,答案通常是你一个月没打开过的项目。

| 内容 | 位置 | 能安全删除吗? |
|---|---|---|
| 项目依赖 | <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
可以按大小或最后修改时间排序,然后从上往下处理。最后修改时间这一列最有用:一年没动过的文件夹,删掉基本稳妥。
哪些项目要跳过
- 这周正在使用的任何项目。重装只需几分钟,但它还需要联网,而且如果你的锁定文件约束不严,可能会装上更新的版本。
- 没有锁定文件的项目。没有
package-lock.json、pnpm-lock.yaml或yarn.lock,重装得到的版本可能和原来的不一样。请先确认锁定文件已提交。 - 带有本地补丁的项目。如果你手动编辑过
node_modules里的文件,又没用过patch-package或pnpm patch,那处修改会随文件夹一起消失。 - 依赖的包后来已从 npm 下架的旧项目,或者依赖你已无法访问的私有仓库。这种情况很少见,但这是删除会永久丢失东西的唯一情形。
- 需要离线使用的任何项目。如果你马上要出行,想在飞机上运行项目,就别动它。
使用 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。它是让重装得到相同版本的依据。