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是经受住了长期考验的。