背景

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

可能会有错误,希望大家评论指正,十分感谢。

测试电脑系统:Mac

初始化

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

npm init

cnpm init

yarn init

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

安装包

步骤:在三个文件夹里分别用三种命令安装包,然后在不同文件夹换命令安装,查看文件变化情况

npm i dayjs

  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里是否一致,有助于验证包依赖没有更改

npm、cnpm、yarn 安装删除异同的更多相关文章

  1. npm cnpm yarn 安装

    安装node.js,其中已经集成了npm,可以将npm切换到国内镜像 $ npm config set registry https://registry.npm.taobao.org -- 配置后可 ...

  2. npm(cnpm)介绍(安装gulp)

    1.npm(node package manager) nodejs的包管理器,用于node插件管理(安装.卸载.更新.管理依赖等); 2.使用npm安装安装插件: 1).命令提示符执行 npm in ...

  3. 关于npm和yarn 安装vue脚手架

    第一篇博客有点小紧张.轻喷~ 第一步:安装node.js       地址 --------https://nodejs.org/en/ 详细步骤这里就不写了    可以去看     地址 ----- ...

  4. npm\cnpm\yarn\tyarn 关于源和代理的问题

    npm 是一个包管理器.Node.js 自带. cnpm 是 npm 的阿里版,用的阿里源. yarn 是另一个包管理器,不自带,需要另外装.可以单独装,也可以用 npm 装. tyarn 是 yar ...

  5. Nodejs NPM CNPM优雅安装install

    由于npm和cnpm都能安装组件,安装的组件有的保存在c盘用户目录的Appdata隐藏目录下,有的保存在安装node的目录下,而且安装在c盘的话,重装系统又得重新部署,甚是麻烦,所以这里提供优雅安装的 ...

  6. npm cnpm yarn

    npm 如何下载指定版本的组件 先确保文件目录下含有 package.json 文件, 没有的话,可以通过 npm init 创建, 然后只需要在组件的后面加上 @2.8.1 版本号即可, 例如:re ...

  7. Npm vs Yarn 之备忘大全

    有则笑话,如此讲到:"老丈人爱吃核桃,昨天买了二斤陪妻子送去,老丈人年轻时练过武,用手一拍核桃就碎了,笑着对我说:你还用锤子,你看我用手就成.我嘴一抽,来了句:人和动物最大的区别就是人会使用 ...

  8. npm安装删除模块以及cnpm淘宝镜像

    npm安装模块 [$ npm install xxx]利用 npm 安装xxx模块到当前命令行所在目录: [$ npm install -g xxx]利用npm安装全局模块xxx: npm 删除模块 ...

  9. 大话npm,cnpm和yarn

    npm:基于node.js的包管理工具; 常用命令 npm install 包名; 缺点:因服务器在国外,所以下载包的速度超级慢,所以出现了cnpm和yarn cnpm:跟npm是一样的,这是淘宝出的 ...

随机推荐

  1. Ueditor增加文字竖排显示和从右向左输入(支持蒙古文和维吾尔文)

    平时我们在ueditor中都是输入的中文,排版都是从左向右输入.但是当输入一些少数民民族言时,ueditor却不能正常显示. 例如蒙古文字,传统蒙文是竖排书写.如下图:传统蒙古文排文方式,<蒙古 ...

  2. Python Cookbook 数据结构和算法

    1.查找最大或最小的N个元素 import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2] print(heapq.nlargest(3, n ...

  3. 一个账户接管几乎所有阿里巴巴网站(CSRF漏洞+WAF绕过)

    场景 文章是关于某些客户端漏洞导致几个阿里巴巴网站的帐户被接管. 条件 TL;DR 必要条件,例如JSONP,某些浏览器处理cookie等行为. 攻击原理 大多数阿里巴巴的网站加载并执行外部JavaS ...

  4. git知识总结-2.git基本操作之原理说明

    0.前言 本文主要对git常用命令的工作原理做一个详细的说明,常用命令主要包括: 1.git add git add相关命令很简单,主要实现将工作区修改的内容提交到暂存区,交由git管理. 2. gi ...

  5. linux系统下完全卸载Jenkins

    1.关闭tomcat:./shutdown.sh 2.删除/webapps/jenkins下所有文件:rm -rf jenkins 3.删除配置文件:rm -rf /root/.jenkins/

  6. 010_TCP queue的研究

    先来回顾下三次握手里面涉及到的问题:1. 当 client 通过 connect 向 server 发出 SYN 包时,client 会维护一个 socket 等待队列,而 server 会维护一个 ...

  7. /usr/bin/ld: warning: libavformat.so.57, needed by /home/camera.so, not found (try using -rpath or -rpath-link)

    ffmpeg中,使用libavformt.so.57时,查找不到. 解决方案: 修改ld.so.conf文件,添加路径. sudo gedit /etc/ld.so.conf 在文件末尾添加路径 /u ...

  8. 收藏一个可以学习javascript prototype的链接

    https://github.com/mqyqingfeng/Blog/issues/2

  9. Arrays类的运用,二分法,数组的复制,命令行参数的运用,二维数组,Object,equals

    /*Arrays jdk中为了便于开发,给开发者提供了Arrays类, 其中包含了很多数组的常用操作.例如快速输出.排序.查找等.*/ import java.util.Arrays; public ...

  10. Jenkins通过git tags进行回滚代码

    配置Jenkins获取git tag代码的方式其实方法很多,目前我使用比较多的主要是通过Git Parameter 来配置动态的获取最新tags代码,主要我们首先需要安装一下Git Parameter ...