npm、cnpm、yarn 安装删除异同

背景

一直以为npm、cnpm、yarn的安装删除基本同样用哪一个都行,不过俗话说的好,实践出真知,这里记录一下今天简单测试获得的结果总结。node

可能会有错误,但愿你们评论指正,十分感谢。shell

测试电脑系统:Macnpm

初始化

步骤:在三个文件夹里分别执行如下命令json

npm init测试

cnpm initspa

yarn init3d

结果都是添加了一个package.json文件code

安装包

步骤:在三个文件夹里分别用三种命令安装包,而后在不一样文件夹换命令安装,查看文件变化状况blog

npm i dayjsci

  1. 较其余两种方式速度慢些
  2. 自动生成了package-lock.json
  3. node_modules中只有一个dayjs包
  4. dependencies依赖里有dayjs

yarn add moment 安装成功,package-lock.json中没有moment版本锁

cnpm i dayjs

  1. 没有生成lock文件
  2. node_modules里有两个包(不重要)
  3. dayjs没有加入到dependencies中,使用cnpm i dayjs -S才能加进去

yarn add dayjs

  1. 生成了yarn.lock文件
  2. node_modules里有dayjs包和.yarn-integrity文件(感受是存储依赖版本的hash值,yarn check --integrity可能会用到)
  3. dependencies依赖里有dayjs

npm i moment 安装成功,yarn.lock中没有moment版本锁

删除包

删除步骤尝试略多,不赘述,直接一块儿总结。

测试结果

  1. 以下图,上面是npm、yarn安装的包,下面是cnpm安装的包
  2. npm i xxx 默认参数为 -S,改变package.json和package-lock.json,同时会删除掉cnpm安装的包(无论cnpm是否带参)
  3. npm r xxx,改变package.json和package-lock.json,删除存在与依赖的包时,同时会把没有在依赖里的其余包删除掉(好比没有加参数的用cnpm安装的包),有在依赖里的其余包会被更新
    变成
  4. cnpm i xxx / cnpm r xxx 只能安装 / 删除包,不改变任何配置文件
  5. cnpm i xxx / cnpm r xxx 带 -S / -D 参数时,只改变package.json,不改变锁文件
  6. yarn add xxx 默认参数为 -S,改变package.json和yarn.lock
  7. yarn remove xxx 找不到没有写入package.json依赖的包,没法删除;写入package.json依赖的能够删除
  8. yarn remove xxx 改变package.json和package-lock.json,删除存在与依赖的包时,同时会把没有在依赖里的其余包删除掉(好比没有加参数的用cnpm安装的包),有在依赖里的其余包会被更新

✨理论总结✨

能改变package.json的命令

  1. npm、yarn
  2. cnpm带 -S / -D 参数时

锁文件的改变

  1. package-lock.json文件只由npm改变
  2. yarn.lock文件只由yarn改变
  3. cnpm带不带参数都没法影响两个锁文件

cnpm安装的包会受到的影响

  1. npm、yarn安装包时会把cnpm不带 -S / -D 安装的其余包删除
  2. npm、yarn删除包时会把cnpm不带 -S / -D 安装的其余包删除,有在依赖里的cnpm安装的其余包会被更新
  3. npm安装包时会把cnpm带 -S / -D 安装的其余包删除,但package.json里依赖不会被删除,这时再执行npm删除,会按照依赖把误删的其余包装回来,可是继续安装不会装回来。(ps:有点秀~)
  4. yarn安装包时会把cnpm带 -S / -D 安装的其余包更新
  5. npm能直接删除cnpm不带 -S / -D 安装的包
  6. yarn不能直接删除cnpm不带 -S / -D 安装的包,会提示找不到包

(cnpm带不带 -S / -D归根结底是有没有在package.json中添加依赖)


附一个小知识

yarn check                  //检查package.json里的依赖版本和yarn.lock里是否一致
yarn check --integrity  //检查package.json里的依赖版本的hash值和yarn.lock里是否一致,有助于验证包依赖没有更改
相关文章
相关标签/搜索