为什么删除 node_modules 这么慢?node_modules怎么删除?

node_modules 文件夹对于前端开发人员来说再熟悉不过了,但是有时在卡发过程中可能会遇到一些问题需要对 node_modules 文件夹进行删除,但是每次删除 node_modules 文件夹的时候都特别慢,甚至有时候还会提示权限不足,令人烦恼。本文将带详细介绍为什么删除 node_modules 这么慢的原因,以及 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 文件夹?6 种方法
1. 原生命令行删除(跨平台)
Windows (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:
# 使用 rm 命令 rm -rf node_modules
2. 使用专用删除工具
rimraf(Node.js 工具):
# 全局安装 npm install -g rimraf # 在项目目录使用 rimraf node_modules # 或使用 npx(无需安装) npx rimraf node_modules
快速删除脚本(Windows 批处理):
@echo off echo 正在删除 node_modules... rmdir /s /q node_modules echo 删除完成! pause
3. 使用包管理器的清理功能
使用 npm:
# npm v6.5+ 新增的清理命令 npm clean-install # 或先删除再安装 npm ci
使用 yarn:
# yarn 的自动清理 yarn clean # 使用 Plug'n'Play 模式(避免 node_modules) yarn --pnp
使用 pnpm:
# pnpm 使用硬链接,删除更快 pnpm store prune # 清理存储 pnpm install
4. 操作系统级优化
Windows 优化:
- 临时禁用防病毒软件;
- 使用管理员权限运行命令行;
- 使用快速删除工具(如 FastDelete)。
macOS/Linux 优化:
# 使用 rsync 技巧(有时更快) rsync -a --delete empty_dir/ node_modules/
5.避免频繁删除
- 使用
Docker容器:在容器内开发,删除容器即可; - 使用虚拟机或
WSL2:隔离环境; - 依赖缓存策略:合理配置
npm/yarn缓存。
6. 现代包管理器的优势
pnpm 解决方案:
pnpm使用符号链接和内容寻址存储;node_modules很小,主要文件在全局存储。
pnpm install # 安装快,删除也快
Yarn Plug’n’Play:
// package.json
{
"installConfig": {
"pnp": true
}
}
// 无需 node_modules 目录
结语
node_modules删除慢,并不是你电脑的问题,也不是你操作不对,而是 Node 生态本身的历史包袱。
如果你只是偶尔删一次,用命令行或者rimraf就够了;
如果你经常重装依赖、切分支、拉项目,那我会强烈建议你试试pnpm或Yarn PnP,真的能明显改善体验。
以上关于为什么删除 node_modules 这么慢?node_modules怎么删除?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 为什么删除 node_modules 这么慢?node_modules怎么删除?
微信
支付宝