打印
[技术讨论]

删除 node_modules 依赖文件很慢?其实三秒就能删除了

[复制链接]
1048|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
科叼|  楼主 | 2024-8-12 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
作者:天天鸭
链接:juejin.cn/post/7389925676532908041

前言:估计只要是从事前端开发的友友们肯定都会遇到过删除node_modules依赖文件的情况,但你们有没有发现删除的特别慢,如果一些引用比较多库的项目,删除都得要一个小时,所以接下来我就从删除依赖为什么会慢、如何秒删除依赖和对比其它几种主流删除方式等几个方面去写这文章。

顺便吆喝一声,技术大厂,前后端测试捞人;综合薪酬15-35K,加班有加班费。

一、删除node_modules依赖文件为什么会慢?
直接通过图形用户界面删除 node_modules 文件夹慢,原因主要有以下5点原因:
(1)文件数量巨大:node_modules依赖可能会有上万个文件和文件夹,那么就使得操作系统需要花费非常多的时间来处理每一个文件的删除。
(2)文件系统缓存:操作系统有可能需要花时间去刷新文件系统的缓存,特别是对于那些频繁访问的文件或目录。
(3)文件进程被占用:如果某些进程正在使用 node_modules 中的文件,也就是被正在引用,那么这些文件将无法被删除的,会弹出提示直到相关的进程释放。
(4)磁盘IO限制:硬盘或SSD的读写速度也可能成为瓶颈,尤其是在比较老机械硬盘上,随机读写的性能较低就会特别慢。
(5)图形界面限制:图形界面的文件管理器在处理大量文件时,可能会因为UI的更新和绘制而变慢。
二、怎样快速完成node_modules依赖删除?
其实借助一个命令行工具rimraf即可实现秒删除,如下是具体的操作流程。
(1)先全局安装 rimraf
npm install -g rimraf(2)执行命令删除
rimraf node_modules(3)重新下载依赖
npm install
注意1:或者如果你使用的是 npx(无需全局安装 rimraf)
npx rimraf node_modules
注意2:Vue项目删除node_modules和改了配置要重新启动项目,要不然会不生效
三、rimraf为什么能快速删除node_modules?
rimraf其实是一个Node.js模块,它能提供一个跨平台的方式来删除文件和目录。它快速的主要原因其实主要有以下几点:
(1)异步操作:因为rimraf使用异步IO操作,那么它就不会阻塞事件循环,能更高效地处理大量文件和目录的删除。
(2)递归删除:rimraf会递归地删除目录及其所有子目录和文件,这比手动或使用某些操作系统命令(如Windows下的rmdir)有更高的效率,因为后者有可能需要很多次调用才能完全清空一个非空目录。
(3)错误处理:rimraf能够更好地处理删除过程中可能出现的错误问题,比如权限问题或文件正在被引用的情况,它会尝试重试或跳过这些文件,而不是把整个过程失败。
(4)跨平台兼容性:rimraf在不同的操作系统上的表现都是一致的,这就意味着在Windows、Linux还是macOS上,它的性能和行为都是很接近的。
四、rimraf对比其它几种删除方式的优劣
主要是看到评论区不少大佬提了几种不同的优秀删除方式,所以特意去一一查资料对比一下优劣,方便大家选择更合适的方案。
(1)对比 rm -rf
  • 安全性:rimraf 更安全,因为它不会导致 rm -rf 那样灾难性的误操作,比如意外删除根目录等。。
  • 跨平台: rimraf 在所有操作系统上表现一致兼容性更好,而 rm -rf 的行为在不同系统中可能有所不同。
  • 异步 vs 同步:rimraf 异步执行,适合 Node.js 的非阻塞 I/O 模型,而 rm -rf 是同步的,可能阻塞进程直到操作完成。
  • 错误处理:rimraf 提供了更详细的错误处理机制,而 rm -rf 在遇到错误时可能只会输出到标准错误流。
综上对比,在 Node.js 开发环境中,rimraf 通常是更优的选择,因为它更好地适应了 Node.js 的异步特性,并提供了更安全的文件删除方法。而在 Unix/Linux 命令行环境中,rm -rf 是直接可用的本地命令,适用于快速的文件管理任务。
(2)对比 del
del(也称为 del-cli)是另一个用于删除文件和文件夹的 npm 包,对比特点如下。
  • 功能丰富度: del 支持更复杂的模式匹配,而 rimraf 更专注于简单的文件夹删除。
  • API 设计: del 提供了更丰富的 API,包括同步和异步版本,而 rimraf 仅提供异步 API。
  • 使用场景: 如果我们只需要删除文件夹,rimraf 可能就足够了;如果我们需要更复杂的文件匹配和删除逻辑,del 可能更适合。
两者都能高效地删除 node_modules 依赖,但在具体使用时可以根据项目需求和个人偏好来选择。在大多数情况下,rimraf 因为其简单性和广泛的支持而成为首选。但如果我们的项目中有更复杂的文件清理需求,del 提供的额外功能可能更有吸引力。
(3)对比 rmdir /S
  • 跨平台 vs 单平台:rimraf 可以在多个平台上运行兼容性更好,而 rmdir /S 仅限于 Windows,因此有很大的局限性。
  • 错误处理: rimraf 提供了更精细的错误处理机制,而 rmdir /S 的错误处理相对简单。如果node_modules目录中的某个文件或目录正在被另一个进程使用,rmdir命令可能会失败。
  • 使用场景: rimraf 更适合在 Node.js 脚本中使用,特别是在构建自动化任务或 CI/CD 流水线时。rmdir /S 则适合在 Windows 命令行中进行手动操作或在批处理脚本中使用。
小结:上面仅仅是博主日常用的解决方法,但如果有更多有意思的方法或者哪里写���不对方便指正哈。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

112

帖子

1

粉丝