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

AI 概述
node_modules是项目存放依赖包的核心文件夹,但常因依赖嵌套、大量小文件、版本兼容等问题变得庞大,导致删除时耗时久,原因包括文件数量巨大、结构深、Windows系统特性及磁盘I/O瓶颈等。本文介绍了6种删除方法,包括原生命令行删除、使用rimraf等专用工具、利用包管理器清理功能、操作系统级优化、避免频繁删除策略及采用现代包管理器如pnpm或Yarn PnP,后者能显著改善安装与删除体验,减少node_modules相关问题。
目录
文章目录隐藏
  1. node_modules 是什么?
  2. node_modules 的作用是什么?
  3. 为什么 node_modules 会这么大?
  4. 为什么删除 node_modules 文件夹这么耗时?
  5. 怎么删除 node_modules 文件夹?6 种方法
  6. 结语

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

node_modules 文件夹对于前端开发人员来说再熟悉不过了,但是有时在卡发过程中可能会遇到一些问题需要对 node_modules 文件夹进行删除,但是每次删除 node_modules 文件夹的时候都特别慢,甚至有时候还会提示权限不足,令人烦恼。本文将带详细介绍为什么删除 node_modules 这么慢的原因,以及 node_modules 删除的方法。

node_modules 是什么?

简单来说,node_modules就是项目里存放所有依赖包的地方。每当你用npm installyarn安装依赖时,所有依赖和它们的依赖,都会被下载到这个文件夹里。

它是 Node.js 项目中非常核心的一个文件夹,没有它,项目无法运行。

node_modules 的作用是什么?

node_modules的作用就是存放项目依赖。

举个例子,我的项目用到了 lodash、axios、vue,对应的依赖安装后,这些包都会放到node_modules文件夹里,在代码里有用importrequire引入的时候,Node都会去node_modules里寻找对应的模块。

可以理解为,它是项目的一个依赖仓库,所有功能模块都靠它支撑。

为什么 node_modules 会这么大?

如果你打开一个前端项目,依赖安装后,你发现node_modules可能会有几百 MB 或者几 GB 的大小,这有几个原因:

1. 依赖嵌套

每个包都有自己的依赖,npmyarn会把它们都下载下来。例如 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 优化:

  1. 临时禁用防病毒软件;
  2. 使用管理员权限运行命令行;
  3. 使用快速删除工具(如 FastDelete)。

macOS/Linux 优化:

# 使用 rsync 技巧(有时更快)
rsync -a --delete empty_dir/ node_modules/

5.避免频繁删除

  1. 使用Docker容器:在容器内开发,删除容器即可;
  2. 使用虚拟机或WSL2:隔离环境;
  3. 依赖缓存策略:合理配置npm/yarn缓存。

6. 现代包管理器的优势

pnpm 解决方案:

  • pnpm使用符号链接和内容寻址存储;
  • node_modules很小,主要文件在全局存储。
pnpm install  # 安装快,删除也快

Yarn Plug’n’Play:

// package.json
{
  "installConfig": {
    "pnp": true
  }
}
// 无需 node_modules 目录

结语

node_modules删除慢,并不是你电脑的问题,也不是你操作不对,而是 Node 生态本身的历史包袱。

如果你只是偶尔删一次,用命令行或者rimraf就够了;

如果你经常重装依赖、切分支、拉项目,那我会强烈建议你试试pnpmYarn PnP,真的能明显改善体验。

以上关于为什么删除 node_modules 这么慢?node_modules怎么删除?的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 为什么删除 node_modules 这么慢?node_modules怎么删除?

发表回复