结论:

  • 1. npm uninstall会备份包本身依赖的node_modules,rm -f会删除整个目录
  • 2. npm uninstall不会删除被依赖的包。即使显式要删除这个包,但它被依赖不会删除。rm -f会
  • 3. npm uninstall有全局模式,还会删除软链,rm -r只删目录,可能漏掉软链
  • 4. npm uninstall会删除package.json中的dependencies条目,rm -r不会
  • 5. npm uninstall会安装那些在package.json中漏装的包,rm -r当然不可能有这个副作用

总之,npm uninstall和npm install是同一套代码,同一逻辑,都是【同步当前包环境】的操作。而rm -r是强制删除一个目录。

从名称上看,uninstall确实命名不佳,它非常复杂,和install一样复杂,是整个npm设计的核心,容易误解成删除。

没有文档,只能看代码,哎

分析:

比如,要删除 mkdirp

npm uninstall mkdir 

会执行下列操作

第一步 加载本地实际存在的包列表

 
readLocalPackageData (如果用 -g 全局模式会执行 readGlobalPackageData,此线不表)
read-package-tree
 这是个包,这个包会递归的读取 node_modules 下的包,返回一个排重过的列表。
 
 
 

第二步 加载 package.json 得到理想包列表

通过分析package.json得到列表

loadAllDepsIntoIdealTree

在IdealTree中过滤掉要删除的包,这样就得到两个Tree,一个是 CurrentTree,一个是 IdealTree

第三步  同步CurrentTree和IdealTree

  • 1.  如果CurrentTree中存在,IdealTree中不存在,忽略
  • 2. 如果CurrentTree中不存在,IdealTree中存在,则安装
  • 2. 如果CurrentTree中存在,IdealTree中不存在,则删除

第四步 执行删除操作的逻辑

  • 1. 如果要删除的包被当前IdealTree中其它包依赖,则不删除
  • 2. 如果要删除的包中有依赖的包,则备份它们,稍候恢复
mv ./node_modules/mkdirp/node_modules ./node_modules/.mkdirp.MODULES
rm -rf
./node_modules/mkdirp/
mkdir
./node_modules/mkdirp
mv ./node_modules/.mkdirp.MODULES ./node_modules/mkdirp/node_modules
使用 rimraf删除目录,rimraf是个包,它提供类似rm -rf的功能,递归的删除目录和文件,有重试逻辑等。

看似简单的 rm -rf为什么要单独实现呢?


nodejs fs模块早期确实没提供rm -r的功能,fs模块只提供了删除单个目录和单个文件的能力


在 v12.10.0 后提供了递归删除目录的api,在 v14.14.0 提供了rm -rf的api。


来的太迟了,所以在开发npm的时候,就采用了rimraf这个包。

如果要删除的包中,没有node_modules,则不会执行备份的操作。

npm uninstall和rm直接删除的区别的更多相关文章

  1. rm(操作系统的删除文件)与git rm的区别

    git rm:1.删除了一个文件2.把这个删除的文件纳入暂存区如果想要恢复这个文件,则需要做2个操作a.git reset HEAD file_name --将文件从暂存区恢复到工作区b.git ch ...

  2. npm install、npm init、npm update、npm uninstall和package.json

    npm install 安装本地包 npm install <package_name>:这个命令将在当前目录中创建node_modules目录(如果尚不存在),并将该软件包下载到该目录. ...

  3. npm 常用指令 使用指令删除 node_modules 包

    查看 npm 命令 npm help 全局命令参数 -g npm install -g 安装全局 npm uninstall -g 卸载全局 全局node包中 i5ting_toc 这个包可以把md文 ...

  4. rm: 无法删除&quot;/run/user/root/gvfs&quot;: 是一个目录 问题

    2013-03-02    bxd@linux:~$ sudo su [sudo] password for bxd:  root@linux:/home/bxd# exit exit rm: 无法删 ...

  5. Linux中RM快速删除大量文件/文件夹方法

    昨天遇到一个问题,在Linux中有一个文件夹里面含有大量的Cache文件(夹),数量级可能在百万级别,使用rm -rf ./* 删除时间慢到不可接受.Google了一下,查到了一种方法,试用了下确实比 ...

  6. Linux下通过rm -f删除大量文件时提示"-bash: /bin/rm: Argument list too long"的解决方法

    Linux下通过rm -f删除/var/spool/postfix/maildrop/中大量的小文件时提示: "-bash: /bin/rm: Argument list too long& ...

  7. rm: 无法删除 "xxxxx.o" : 输入/输出错误.

    rm: 无法删除 "xxxxx.o" : 输入/输出错误. 碰到无法删除的文件,以为完蛋了,要重装. 后面重启一下就可以了

  8. 一文看懂npm、yarn、pnpm之间的区别

    文作者对比了当前主流的包管理工具npm.yarn.pnpm之间的区别,并提出了合适的使用建议,以下为译文: NPM npm是Node.js能够如此成功的主要原因之一.npm团队做了很多的工作,以确保n ...

  9. Linux下通过 rm -f 删除大量文件时报错:Argument list too long

    Linux下通过 rm -f 删除大量的小文件时出现类似如下错误信息:  -bash: /bin/rm: Argument list too long 如下图所示: 问题原因 如果待删除文件中包含的小 ...

随机推荐

  1. UML的三项基础

    UML的定义 UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号和文本语法提供标准. 五类模型图 用例视图:用例图 逻辑视图:类图.对象图.包图(我把包放在一起的图) 静态视图 ...

  2. 得到知识服务app原型设计比较与实践

    一.几种原型设计工具的比较 墨刀 优点: 拥有PC端.手机端.网页版,让你随时随地可以进行产品原型设计: 其定位是主要用于设计移动APP原型,其控件的拖拉.大小的调整,都会自然去匹配相应的母版大小,非 ...

  3. 源码解析Synchronous Queue 这种特立独行的队列

    摘要:Synchronous Queue 是一种特立独行的队列,其本身是没有容量的,比如调用者放一个数据到队列中,调用者是不能够立马返回的,调用者必须等待别人把我放进去的数据消费掉了,才能够返回. 本 ...

  4. 99乘法表 java for循环

    public static void main(String[] args) { //0-100的奇数和偶数和 int jsum=0; int osum=0; for (int i = 0; i &l ...

  5. Matlab学习笔记 绘图

    1.二维曲线(1)plot函数①plot函数的基本用法:plot(x,y),其中x和y分别用于存储x坐标和y坐标数据. >>x=[1,2,3]; >>y=[4,5,6]; &g ...

  6. go-websocket服务端/客户端

    目录 websocket 服务端 客户端 websocket websocket.Upgrader升级为websocket协议 服务端 package main import ( "fmt& ...

  7. SmartDialog迁移至4.0:一份真诚的迁移说明

    前言 一个开源库,随着不断的迭代优化,难免会遇到一个很痛苦的问题 最初的设计并不是很合理:想添加的很多新功能都受此掣肘 想使得该库更加的强大和健壮,必须要做一个重构 因为重构涉及到对外暴露的api,所 ...

  8. Focal and Global Knowledge Distillation for Detectors

    一. 概述 论文地址:链接 代码地址:链接 论文简介: 此篇论文是在CGNet上增加部分限制loss而来 核心部分是将gt框变为mask进行蒸馏 注释:仅为阅读论文和代码,未进行试验,如有漏错请不吝指 ...

  9. python之贪婪算法

    贪婪算法 贪婪算法也称为最优算法,这种算法并不是最准确的答案,但确认最接近答案的近似算法. 这时候有人会问,不是最准确的答案我要她干嘛?但是在日常中,我们有时候会遇到一些我们无法处理的问题,甚至是要花 ...

  10. 134_Power BI Report Server之某消费品运营数据监控

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一背景 最近很久都没有更新文章了,研究了下Power BI Report Server(下文简称pbirs). 今天把pb ...