npm, npx, yarn 的区别

yarn 和 npm 都是 node 软件包管理器,

1. yarn 和 npm 的区别

  1. yarn: 是同步执行所有任务,提高了性能, 而且如果你上一次安装过软件包,第二个会从缓存中获取
  2. npm: 是按照队列执行每一个package, 每一次都是从网络上下载,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装
"6.0.3",  // 表示安装指定的6.0.3版本
"~6.0.3", // 表示安装6.0.X中最新的版本
"^6.0.3"  // 表示安装6.X.X中最新的版本

2. npm 和 npx 对比

* npm 是 node 软件包的管理器
* npx 是 node 软件包的执行工具
  官方文档,从npm@5.2.0 版本开始,npx就和npm捆绑在了一起,可以认为npx是npm 的高级版本,npx 具有更强大的功能,
** npx是一个可执行的二进制文件,原理很简单,运行npx的时候,默认会到 node_modules/.bin 路径和环境变量$PATH里面,检查命令是否存在

For Example:
项目中想运行一个脚本命令有两种方式:
 1, package.json中配置script脚本
 {
   "scripts": {
     "mocha": xxxx
   }
 }
 2, 项目根目录路径下面:
  node-modules/.bin/mocha --version

现在有了npx可以直接执行:
npx mocka --version

*** 执行一次性命令
npx 当执行一个包的时候,会自动检查本地是否存在,如果没有会为你从 npm 上下载,临时安装这个包,并且执行它。当做完这些事情后,已安装的包不会出现在你的全局安装中,所以不用担心长期使用所带来的全局污染。
常用的命令: npx create-react-app my-app
安装一个临时create-react-app并调用,而不用污染全局安装

总结:执行npx命令
1.首先会检查本地项目路径中是否存在要执行的包
2.如果存在,执行;
3.如果不存在,意味着尚未安装该软件包,npx将临时安装其最新版本,然后执行它;

3. pnpm

​ 英文里面的意思叫做 performant npm ,意味“高性能的 npm”,官网地址可以参考 https://pnpm.io/

​ 相比较于 yarn/npm 这两个常用的包管理工具在性能上也有了极大的提升,根据目前官方提供的 benchmark 数据可以看出在一些综合场景下比 npm/yarn 快了大概两倍:

​ 类似于 npm link 项目依赖都是来自全局 npm link 这种方式, 存在很多兼容性问题 , 感兴趣可以了解一下

扩展

因为有了yarn的出现,npm5.0版本之后改进,引入了package-lock.json,速度和性能上也大大提升。

如何选择,个人建议: 大多数项目依然可以采取用npm,兼容性好,成熟,稳定,种类多,有趣,它和node一起提供,管理包安全放心,

关于开发过程中 可能会遇到不同版本的node 、npm 需求 可以通过 nvm 进行 多版本管理