纱线与npm:您需要知道的一切

这篇文章是由同行评审阿德里安散毒马塞罗拉罗卡马特·伯内特艳女ZUAZOVildan Softic 感谢所有SitePoint的审稿作出SitePoint内容也可以是最好的!

2016年10月26日:文章进行了更新,在意见中提出的地址点。

纱线通过Facebook,谷歌,指数和波浪号建立了一个新的JavaScript包管理器。 如在阅读正式宣布 ,其目的是要解决的,面对故宫,也就是这几支球队的问题了一把:

  • 安装包是不是快/一致不够,
  • 有安全问题,如NPM允许程序包安装上运行代码。

但是,不要惊慌! 这并不是完全替代NPM的尝试。 纱只是一个新的CLI客户端,从故宫注册表读取模块。 有关注册表本身没有什么会改变 - 你仍然可以获取并发布数据包正常。

大家是否应跳上了纱线的炒作现在训练? 机会是你从来没有遇到过这些问题NPM。 在这篇文章中,我们将比较NPM和纱,这样你就可以决定哪个是最适合你。

纱线与npm:您需要知道的一切

纱VS NPM:功能差异

乍一看纱和NPM出现类似。 正如我们在引擎盖下,虽然偷看,我们知道是什么使纱线不同。

该yarn.lock文件

package.json ,其中两个NPM和纱线跟踪项目的依赖关系的文件,版本号并不总是准确的。 相反,你可以定义一系列的版本。 这样,您就可以选择一个包的特定主要和次要版本,但允许NPM安装可能会修复一些漏洞的最新补丁。

在一个理想的世界语义版本 ,补丁版本将不包括任何重大更改。 这不幸的是,并非总是如此。 通过NPM采用的策略可能导致成两个机具有相同package.json文件,具有不同版本安装软件包的,可能引入错误。

为了避免包版本错配,准确的安装版本是在锁定文件牵制。 每次添加一个模块时,纱线创建(或更新)一个yarn.lock文件。 这种方式可以保证另一台机器上安装完全相同的包装,同时还具有范围定义允许版本package.json

在故宫,在npm shrinkwrap命令生成一个锁文件,以及, npm install读取该文件中读取之前package.json ,很像纱如何读取yarn.lock第一。 这里最重要的区别是,纱线总是创建和更新yarn.lock ,而NPM不会创建一个默认情况下,只有更新npm-shrinkwrap.json时,它的存在。

  1. yarn.lock文档
  2. NPM拆封文件

并行安装

每当NPM或纱线需要安装一个软件包,它执行一系列任务。 在故宫,这些任务每包和顺序执行,这意味着它会等待一个包移动到下一个之前完全安装。 纱线并行地执行这些任务,提高性能。

为了便于比较,我安装了快车同时使用NPM和纱没有拆封/锁文件,并用干净的缓存包。 这将安装总共42包。

  • NPM:9秒
  • 纱线:1.37秒

我简直不敢相信自己的眼睛。 重复产生类似的结果的步骤。 然后我装了一口包,造成195个依赖性。

  • 故宫:11秒
  • 纱线:7.81秒

看来差异密切依赖于正在安装的软件包的数量。 无论哪种方式,纱线持续较快。

干净的输出

默认情况下,NPM是非常详细。 例如,它运行时,递归地列出所有安装的软件包npm install <package> 在另一方面纱线,是不是冗长的。 当细节可以通过其它命令来获得,它列出了相应的表情符号,显著较少的信息(除非你是在Windows上)。

纱线与npm:您需要知道的一切

纱VS NPM:CLI差异

除了一些功能上的差异,纱线也有不同的命令。 有些NPM命令被拆除,其他修改,增加了几个有趣的命令进行。

全球纱

不像故宫,在使用中进行全球运营-g--global标志,纱命令需要与前缀global 就像故宫,具体项目的依赖应该不需要全球的装机量。

global前缀只适用于yarn addyarn binyarn lsyarn remove 随着外yarn add ,这些命令也等同于NPM等同。

  1. 纱全球文档

纱安装

npm install命令将从安装依赖package.json文件,并允许您添加新的软件包。 yarn install只安装中列出的依赖yarn.lockpackage.json ,按照这个顺序。

  1. 纱安装文档
  2. NPM安装文档

纱线添加[-dev]

类似的npm install <package>yarn add <package>允许您添加和安装的依赖。 随着命令的名字所暗示的,它增加了一个依赖,自动意味着它保存到包中的一个参考package.json文件,就像故宫的--save标志一样。 纱线的--dev标志将程序包为开发人员的依赖,就像故宫的--save-dev标志。

  1. yarn添加文档
  2. NPM安装文档

纱线许可证[LS |生成-声明]

在写这篇文章的时候,没有NPM等效可用。 yarn licenses ls列出所有已安装的软件包的许可证。 yarn licenses generate-disclaimer生成包含所有包的所有许可证的内容的免责声明。 某些许可证的状态,你必须在项目中包含该项目的许可证,使之成为一个相当有用的工具来做到这一点。

  1. 纱许可证文件

为什么纱

此命令偷窥到依赖图和数字为什么特定的软件包安装在您的项目。 也许你明确地添加它,也许这是你安装了软件包的依赖。 yarn why可以帮助你找出答案。

  1. 纱线为什么文档

纱线升级[包]

此命令升级包符合在设置版本规则的最新版本package.json并重新yarn.lock 这类似于npm update

有趣的是,指定一个包时,它更新包,最新的版本和更新中定义的标签package.json 这意味着,该命令可能会更新软件包新的主要版本。

  1. 纱升级文档

纱线产生锁进入

yarn generate-lock-entry命令生成yarn.lock基于在设置的依赖关系文件package.json 这类似于npm shrinkwrap 该命令应谨慎使用,因为会产生和增加,并通过升级依赖性时自动更新锁定文件yarn addyarn upgrade

  1. 纱线产生锁入文件
  2. NPM拆封文件

的稳定性和可靠性

可以在纱线炒作火车出轨变? 它确实收到了很多的问题,报告的第一天它被发布给公众,但解决问题的速度也令人咋舌。 双方表示该社区正在努力找到并删除错误。 综观问题的数量和类型,纱似乎对于大多数用户稳定,但可能还没有适合边缘情况。

需要注意的是,尽管包管理器可能是为您的项目是至关重要的,它只是一个包管理器。 如果出现问题,重新安装包不应该是困难的,而且也不是恢复到故宫。

未来

也许你已经意识到的Node.js和io.js.之间的历史 总结一下:io.js是的Node.js的一个分支,一些分歧项目的治理后,一些核心开发者创建的。 相反,io.js选择了一个开放式的治理。 在不到一年的时间,两队都达成了一致,io.js被合并到Node.js的,和前已经停产了。 不管权利或过错,这带来了很多伟大的功能集成到Node.js的

我看到有NPM和纱线类似的模式。 虽然纱线不是叉,它提高了几个缺点NPM了。 那岂不是冷静,如果NPM从这个教训,并要求Facebook,谷歌和其他纱线的贡献者,以帮助提高NPM呢? 虽然为时尚早说,如果会出现这种情况,我希望它会。

无论哪种方式,纱的未来是光明的。 社区出现兴奋,并接受这个新的包管理器好。 不幸的是,没有路线图是可用的,所以我不知道会有什么惊喜纱在商店为我们。

结论

用更好的方式默认纱均得分相比,NPM。 我们得到一个锁文件免费,安装软件包是速度极快,它们会自动保存在package.json 安装和使用纱线的影响也微乎其微。 您可以尝试它只是一个项目,看看它是否适合你与否。 这使得纱线完美的插入式替代NPM。

我肯定会推荐一个项目试图纱迟早的事。 如果你是谨慎的有关安装和使用新的软件,给它一两个月。 毕竟,NPM是经过实战检验,这绝对是值得的东西在软件开发的世界。

如果你碰巧发现自己等待NPM完成安装包,这可能是阅读的完美瞬间迁移指南 ;)

你怎么看? 您使用的纱了吗? 你愿意试一试? 或者这只是有利于已经支离破碎的生态系统的进一步不成? 让我知道在下面的意见。

From: https://www.sitepoint.com//yarn-vs-npm/