大家好,我是大华!
经常写前端的朋友一定很熟悉,每次删除 node_modules 文件夹的时候都特别慢,甚至有时候还会提示权限不足。

node_modules 是什么?
简单来说,node_modules 就是项目里存放所有依赖包的地方。每当你用 npm install 或 yarn 安装依赖时,所有依赖和它们的依赖,都会被下载到这个文件夹里。
它是 Node.js 项目中非常核心的一个文件夹,没有它,项目无法运行。
node_modules 的作用
node_modules 的作用就是存放项目依赖。
举个例子,我的项目用到了 lodash、axios、vue,对应的依赖安装后,这些包都会放到 node_modules 文件夹里,在代码里有用 import 或 require 引入的时候,Node 都会去 node_modules 里寻找对应的模块。
可以理解为,它是项目的一个依赖仓库,所有功能模块都靠它支撑。
为什么 node_modules 会这么大?
如果你打开一个前端项目,依赖安装后,你发现 node_modules 可能会有几百 MB 或者几 GB 的大小,这有几个原因:
1. 依赖嵌套
每个包都有自己的依赖,npm 或 yarn 会把它们都下载下来。例如 vue-router 依赖 vue,axios 依赖 follow-redirects,它们又有自己的依赖,一层层叠加,导致文件数量和体积剧增。
2. 大量小文件
Node 包里通常会包含源码、文档、测试文件等大量小文件。虽然每个文件不大,但数量非常多,文件总数动不动就几十万,操作系统处理这么多小文件非常耗时。
3. 版本兼容问题
有时候同一个依赖会出现多个版本共存,每个版本都会占用额外空间,进一步膨胀 node_modules。
示例:一个Vue项目的依赖规模
├── vue
├── vue-router
├── vuex
├── axios
├── webpack (及其15+个直接依赖)
├── babel (及其20+个插件)
└── 其他工具链...
实际安装后可能包含300-1000+个目录,占用数百MB甚至GB级空间。
为什么删除 node_modules 文件夹这么耗时?
我自己在 Windows 或 macOS 上都有过这样的体验:右键删除或者用命令 rm -rf node_modules,都可能卡上几分钟甚至十几分钟。
原因主要有:
1. 文件数量巨大
node_modules通常包含成千上万个小文件,操作系统删除大量小文件比删除单个大文件慢得多
2. 目录结构深
深层嵌套的目录结构需要递归遍历,增加I/O操作
3. Windows的特殊性
NTFS文件系统处理大量小文件效率较低,防病毒软件实时扫描每个删除操作,路径长度限制(260字符)导致额外处理
4. 磁盘I/O瓶颈
机械硬盘(HDD)在随机读写小文件时性能较差,SSD稍好但仍受限制
删除node_modules文件夹的几种方案
方案1:原生命令行删除(跨平台)
Windows (PowerShell):
powershell
# 方法1:使用Remove-Item
Remove-Item -Path .\node_modules -Recurse -Force
# 方法2:使用rd命令(更快)
rd /s /q node_modules
也可以写个脚本,创建一个clean.bat文件
@echo off
echo 开始清理node_modules,可以去摸鱼了...
rd /s /q node_modules
echo 清理完成!可以继续干活了
pause
然后双击运行就可以。
macOS/Linux:
bash
# 使用rm命令
rm -rf node_modules
方案2:使用专用删除工具
rimraf(Node.js工具):
bash
# 全局安装
npm install -g rimraf
# 在项目目录使用
rimraf node_modules
# 或使用npx(无需安装)
npx rimraf node_modules
快速删除脚本(Windows批处理):
batch
@echo off
echo 正在删除node_modules...
rmdir /s /q node_modules
echo 删除完成!
pause
方案3:使用包管理器的清理功能
使用npm:
bash
# npm v6.5+ 新增的清理命令
npm clean-install
# 或先删除再安装
npm ci
使用yarn:
bash
# yarn的自动清理
yarn clean
# 使用Plug'n'Play模式(避免node_modules)
yarn --pnp
使用pnpm:
bash
# pnpm使用硬链接,删除更快
pnpm store prune # 清理存储
pnpm install
方案4:操作系统级优化
Windows优化:
- 临时禁用防病毒软件
- 使用管理员权限运行命令行
- 使用快速删除工具(如FastDelete)
macOS/Linux优化:
bash
# 使用rsync技巧(有时更快)
rsync -a --delete empty_dir/ node_modules/
方案5:避免频繁删除
- 使用Docker容器:在容器内开发,删除容器即可
- 使用虚拟机或WSL2:隔离环境
- 依赖缓存策略:合理配置npm/yarn缓存
方案6:现代包管理器的优势
pnpm解决方案:
bash
# pnpm使用符号链接和内容寻址存储
# node_modules很小,主要文件在全局存储
pnpm install # 安装快,删除也快
Yarn Plug'n'Play:
json
// package.json
{
"installConfig": {
"pnp": true
}
}
// 无需node_modules目录
写在最后
node_modules 删除慢,并不是你电脑的问题,也不是你操作不对,而是 Node 生态本身的历史包袱。
如果你只是偶尔删一次,用命令行或者 rimraf 就够了;
如果你经常重装依赖、切分支、拉项目,那我会强烈建议你试试 pnpm 或 Yarn PnP,真的能明显改善体验。
本文首发于公众号:程序员大华,专注前端、Java开发,AI应用和工具的分享。关注我,少走弯路,一起进步!