yarn替代npm

ci 发表于: 2019-05-22   最后更新时间: 2019-05-23 13:58:53  
{{totalSubscript}} 订阅, 2,974 游览

yarn

你所了解的yarn

Yarn Facebook , Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。就像我们可以从官方文档了解那样,它的目的是解决这些团队使用npm面临的少数问题,即:

  • 安装的时候无法保证速度/一致性
  • 安全问题,因为npm安装时允许运行代码

但就目前来说,yarn并没有试图完全取代npm。Yarn 同样是一个从npm注册源获取模块的新的CLI客户端。注册的方式不会有任何变化,也就是说你同样可以正常获取,发布包。是否每个人现在都要跳上Yarn这辆列车?又或者你根本没机会碰到npm的这些问题。本篇文章将会比较npm与 Yarn,最终你可以决定哪款更适合你。

Yarn vs npm: 功能差异

乍一看 Yarn 与npm很类似,但通过引擎的比较就能看出两者的差异。

关于yarn.lock 文件

npm和 Yarn 都使用 package.json 来跟踪项目的依赖,版本号并非一直准确,因为你可以定义版本号范围,这样你可以自主选择一个主版本,次要版本的包,当然npm安装最新的补丁或许也可以优化一些bug。理想状态下使用语义化版本发布补丁不会有大的变化,但不幸的是这必非真理。npm 的这种策略可能导致两台拥有相同 package.json 文件的机器安装了不同版本,可能会导致一些错误。为了避免因版本的错误匹配,一个确定的安装版本被固定在一个锁文件中。每次模块被添加时,Yarn就会创建(或更新)yarn.lock 文件,这样你就可以保证其它机器也安装相同版本的包,同时包含了 package.json 中定义的一系列允许的版本。

我们知道在 npm中同样可以使用 npm shrinkwrap 命令来生成一个锁文件,这样在使用 npm install 时会在读取 package.json 前先读取这个文件,就像 Yarn 会先读取yarn.lock 一样。这里的区别是 Yarn 总会自动更新 yarn.lock,而npm则需要你手动操作。

关于安装

每当npm或 Yarn 需要安装一个包时,它会执行一系列的任务。在npm中这些任务是按包的顺序一个个执行,这意味着必须等待上一个包被完整安装才会进入下一个;Yarn并行的执行这些任务,提高了性能。为了比较,我在没有使用 shrinkwrap/yarn.lock 的方式以及清理了缓存下使用 npm与 Yarn 安装 express,总共安装了 42 个依赖。

  • npm: 9 s
  • Yarn: 1.37 s

通过重复以上步骤,但得到相同结果。接着我安装 gulp 进行测试,总共安装了 195 个依赖。

  • npm: 11 s
  • Yarn: 7.81 s

似乎根据所需要安装的包的数量而有所不同,但 Yarn 依旧更快。

清晰的输出

npm默认情况下非常冗余,例如使用 npm install 时它会递归列出所有安装的信息;而 Yarn 则一点也不冗余,当可以使用其它命令时,它适当的使用 emojis 表情来减少信息(注意Windows 除外)。

yarn对标npm,可以使用npm直接进行安装,安装命令如下:

npm install yarn -g (全局)

yarn VS npm常见命名对标 (更多详见官网)

npm命令 yarn命令
npm install yarn (install)
npm install --save yarn add
npm install --save-dev yarn add --dev
npm uninstall yarn remove
npm init yarn init
npm install -g yarn global add
npm uninstall -g yarn global remove
npm start yarn start
npm run yarn run
npm ls yarn list

关于稳定性与可靠性

Yarn 被炒得这么火热会不会有问题?它正式发布当天就收到很多问题反馈,但官方处理问题的速度极快。这些表明社区正努力开发并修复bug。查看问题反馈的数量和类型可以发现Yarn在大部分用户体验表现很稳定,但也有个别用户存在体验问题。

未来于结论

Yarn 的出现的契机是,它解决了npm现存的一些缺陷。并且有能力完美的替代npm,所以Yarn 发展前景是值得期待的。相比npm的默认配置,Yarn 得到不少认可。我们可以方便生成锁文件,安装包时非常迅速并且他们会自动添加进 package.json,同时安装与使用 Yarn 的影响也很小,你可以直接在一个项目上尝试看它是否可以工作,这使得 Yarn可以完美替代npm。从个人的角度来说,我是极力的推荐大家尽早使用 Yarn,如果你对安装和使用新软件持谨慎态度,也可以持观望态度。毕竟npm是经受住了长期考验的。

更新于 2019-05-23
ci

查看javascript更多相关的文章或提一个关于javascript的问题,也可以与我们一起分享文章