纱线与npm:您需要知道的一切
这篇文章是由同行评审阿德里安散毒 , 马塞罗拉罗卡 , 马特·伯内特 , 艳女ZUAZO和Vildan Softic 。 感谢所有SitePoint的审稿作出SitePoint内容也可以是最好的!
2016年10月26日:文章进行了更新,在意见中提出的地址点。
纱线通过Facebook,谷歌,指数和波浪号建立了一个新的JavaScript包管理器。 如在阅读正式宣布 ,其目的是要解决的,面对故宫,也就是这几支球队的问题了一把:
- 安装包是不是快/一致不够,
- 有安全问题,如NPM允许程序包安装上运行代码。
但是,不要惊慌! 这并不是完全替代NPM的尝试。 纱只是一个新的CLI客户端,从故宫注册表读取模块。 有关注册表本身没有什么会改变 - 你仍然可以获取并发布数据包正常。
大家是否应跳上了纱线的炒作现在训练? 机会是你从来没有遇到过这些问题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
时,它的存在。
并行安装
每当NPM或纱线需要安装一个软件包,它执行一系列任务。 在故宫,这些任务每包和顺序执行,这意味着它会等待一个包移动到下一个之前完全安装。 纱线并行地执行这些任务,提高性能。
为了便于比较,我安装了快车同时使用NPM和纱没有拆封/锁文件,并用干净的缓存包。 这将安装总共42包。
- NPM:9秒
- 纱线:1.37秒
我简直不敢相信自己的眼睛。 重复产生类似的结果的步骤。 然后我装了一口包,造成195个依赖性。
- 故宫:11秒
- 纱线:7.81秒
看来差异密切依赖于正在安装的软件包的数量。 无论哪种方式,纱线持续较快。
干净的输出
默认情况下,NPM是非常详细。 例如,它运行时,递归地列出所有安装的软件包npm install <package>
。 在另一方面纱线,是不是冗长的。 当细节可以通过其它命令来获得,它列出了相应的表情符号,显著较少的信息(除非你是在Windows上)。
纱VS NPM:CLI差异
除了一些功能上的差异,纱线也有不同的命令。 有些NPM命令被拆除,其他修改,增加了几个有趣的命令进行。
全球纱
不像故宫,在使用中进行全球运营-g
或--global
标志,纱命令需要与前缀global
。 就像故宫,具体项目的依赖应该不需要全球的装机量。
在global
前缀只适用于yarn add
, yarn bin
, yarn ls
和yarn remove
。 随着外yarn add
,这些命令也等同于NPM等同。
纱安装
在npm install
命令将从安装依赖package.json
文件,并允许您添加新的软件包。 yarn install
只安装中列出的依赖yarn.lock
或package.json
,按照这个顺序。
纱线添加[-dev]
类似的npm install <package>
, yarn add <package>
允许您添加和安装的依赖。 随着命令的名字所暗示的,它增加了一个依赖,自动意味着它保存到包中的一个参考package.json
文件,就像故宫的--save
标志一样。 纱线的--dev
标志将程序包为开发人员的依赖,就像故宫的--save-dev
标志。
纱线许可证[LS |生成-声明]
在写这篇文章的时候,没有NPM等效可用。 yarn licenses ls
列出所有已安装的软件包的许可证。 yarn licenses generate-disclaimer
生成包含所有包的所有许可证的内容的免责声明。 某些许可证的状态,你必须在项目中包含该项目的许可证,使之成为一个相当有用的工具来做到这一点。
为什么纱
此命令偷窥到依赖图和数字为什么特定的软件包安装在您的项目。 也许你明确地添加它,也许这是你安装了软件包的依赖。 yarn why
可以帮助你找出答案。
纱线升级[包]
此命令升级包符合在设置版本规则的最新版本package.json
并重新yarn.lock
。 这类似于npm update
。
有趣的是,指定一个包时,它更新包,最新的版本和更新中定义的标签package.json
。 这意味着,该命令可能会更新软件包新的主要版本。
纱线产生锁进入
的yarn generate-lock-entry
命令生成yarn.lock
基于在设置的依赖关系文件package.json
。 这类似于npm shrinkwrap
。 该命令应谨慎使用,因为会产生和增加,并通过升级依赖性时自动更新锁定文件yarn add
和yarn upgrade
。
的稳定性和可靠性
可以在纱线炒作火车出轨变? 它确实收到了很多的问题,报告的第一天它被发布给公众,但解决问题的速度也令人咋舌。 双方表示该社区正在努力找到并删除错误。 综观问题的数量和类型,纱似乎对于大多数用户稳定,但可能还没有适合边缘情况。
需要注意的是,尽管包管理器可能是为您的项目是至关重要的,它只是一个包管理器。 如果出现问题,重新安装包不应该是困难的,而且也不是恢复到故宫。
未来
也许你已经意识到的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完成安装包,这可能是阅读的完美瞬间迁移指南 ;)
你怎么看? 您使用的纱了吗? 你愿意试一试? 或者这只是有利于已经支离破碎的生态系统的进一步不成? 让我知道在下面的意见。