如何删除旧的 node_modules 文件夹
node_modules 可以根据项目的 package.json 和锁文件重新安装,所以暂时不碰的项目,把它删掉通常没问题。动手之前,先确认锁文件在,项目也没有依赖打过补丁的包或私有包。然后一个项目一个项目地来。
要点
- 简单说: node_modules 可以用 package.json 和 lockfile 重新安装,所以删掉不在做的项目里的 node_modules 通常没问题。
- 先检查: 确认 lockfile 在,项目也不依赖打过补丁或私有的包。一次只处理一个项目。
- 用 Mint: Mint 在常见的代码文件夹里找出较大的 node_modules。最近 7 天用过的留在 Keep;闲置又有锁文件的放进 Safe to clean,并写出恢复它的命令。
找出占空间最多的文件夹
先列清单,什么都别删。在终端里运行 find ~/Projects -type d -name node_modules -prune -exec du -sh {} +,会列出 ~/Projects 下每个顶层 node_modules 文件夹和它的大小。把起始目录换成你放代码的地方就行。
查找和删除要分成两步。把 rm -rf 塞进同一条 find 命令里,路径只要偏了一层,删掉的就是别的东西。
删之前要确认的事
打开项目,看看有没有 package-lock.json、yarn.lock 或 pnpm-lock.yaml。没有锁文件的话,重新安装可能会装上比原来更新的版本,项目也许就不能照原样构建了。
另外留意有没有打过补丁的包、本地 link 的包,或者来自私有 registry、以后可能访问不了的依赖。锁文件里的包都还能下载,锁文件才有用。项目重要的话,先确认源代码已经提交或备份。
一次处理一个项目
项目通过了上面的检查,删起来就很快。
- 挑一个暂时不碰的项目,确认它有锁文件。
- 把这个项目的 node_modules 文件夹移到废纸篓。
- 下次要用时,运行项目的安装命令,比如 npm install。
- 确认能构建、测试也能通过,再清空废纸篓。
Mint 能帮你做什么
Mint 会在 ~/github、~/Projects、~/Developer 这类常见的代码文件夹里,找出较大的 node_modules。它先看项目是不是正在用:有程序在项目里工作,或者最近 7 天里在项目中安装过、运行过、改过文件,都算在用。正在用的项目归到 Keep(保留),那一行会写明原因。
闲置而且有锁文件的,归到 Safe to clean(可安全清理)并默认勾选,那一行会写出恢复用的命令,比如 npm install。重新安装就能回来,所以 Clean 会直接删除它。没有锁文件的归到 Yours(你的文件),并注明可能无法恢复,这里不会替你勾选。
Mint 删过之后又装回来的 node_modules 仍会列出来,但从不替你勾选,Auto Care 也不会碰它。点击时 Mint 还会再查一次,如果这期间项目被用过,就不删它的 node_modules。App Store 版的 Mint 只能查看你授权访问的文件夹。
常见问题
能把所有 node_modules 都删掉吗?
不建议。正在开发的项目离不开它,旧项目依赖的包也可能已经下载不到了。
删除 node_modules 会删掉源代码吗?
不会,只要删的是 node_modules 文件夹本身。用终端操作时尤其要核对路径,打错一个字就可能波及整个项目。
项目没有锁文件怎么办?
那样重新安装时,包的版本可能和现在不一样。如果需要这个项目照现在的样子构建,就先留着这个文件夹。
找出那些被忘掉的 node_modules
在 Mint 里扫描一次,删之前先看清哪些项目有锁文件。