安装速度
npm
npm install
的时候巨慢。特别是新的项目拉下来要等半天,删除node_modules
,重新install的时候依旧如此。
yarn
并行安装:无论 npm 还是 Yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行所有任务,提高了性能。
离线模式:如果之前已经安装过一个软件包,用Yarn再次安装时之间从缓存中获取,就不用像npm那样再从网络下载了。
安装版本统一
npm
安装的时候无法保持一致性。由于package.json
文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义。
"1.1.3",
"~1.1.3",
"^1.1.3"
第一个表示精确版本;
第二个表示1.1.x小版本里的最新版本;
第三个表示1.x.x版本里的最新版本;
不过npm 5.0以后,已经引入了package-lock.json,类似yarn.lock功能。
yarn
为了防止拉取到不同的版本,Yarn 有一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock
这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本。
npm 其实也有办法实现处处使用相同版本的 packages,但需要开发者执行 npm shrinkwrap
命令。这个命令将会生成一个锁定文件,在执行 npm install
的时候,该锁定文件会先被读取,和 Yarn 读取 yarn.lock
文件一个道理。npm 和 Yarn 两者的不同之处在于,Yarn 默认会生成这样的锁定文件,而 npm 要通过 shrinkwrap 命令生成 npm-shrinkwrap.json
文件,只有当这个文件存在的时候,packages 版本信息才会被记录和更新。
安装信息的输出
npm
安装的时候,包会在同一时间下载和安装,中途某个时候,一个包抛出了一个错误,但是npm会继续下载和安装包。因为npm会把所有的日志输出到终端,有关错误包的错误信息就会在一大堆npm打印的警告中丢失掉,并且你甚至永远不会注意到实际发生的错误。
其他正常安装的package,控制台会不断地打印出所有被安装上的依赖。
yarn
Yarn 相比npm简洁太多。默认情况下,结合了 emoji直观且直接地打印出必要的信息,也提供了一些命令供开发者查询额外的安装信息。
基本命令对比
npm命令 | yarn命令 | 描述 |
---|---|---|
npm init | yarn init | 初始化一个新项目 |
npm install | yarn install | 根据pageage.json来安装项目 |
npm install --global [package] | yarn global add [package] | 全局安装一个package |
npm install [--save]/[--save-dev] | yarn add /[-dev] | 添加项目依赖/开发依赖 |
npm run | yarn run | 运行package.json中的script |
网友评论