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

2023-11-23 21:50
文章标签 需要 npm 知道 纱线

本文主要是介绍纱线与npm:您需要知道的一切,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文由Adrian Sandu , Marcello La Rocca , Matt Burnett , Nuria Zuazo和Vildan Softic进行了同行评审。 感谢所有SitePoint的同行评审人员使SitePoint内容达到最佳状态!

2016.10.26:文章已更新,以解决评论中提出的问题。

Yarn是由Facebook,Google,Exponent和Tilde构建的新JavaScript软件包管理器。 从官方公告中可以看出,其目的是解决这些团队面对npm的一些问题,即:

  • 安装软件包的速度/一致性不够,并且
  • 存在安全问题,因为npm允许软件包在安装时运行代码。

但是,请不要惊慌! 这不是尝试完全替换npm。 Yarn只是一个新的CLI客户端,可从npm注册表中获取模块。 注册表本身没有任何变化-您仍然可以照常获取和发布程序包。

现在每个人都应该跳上纱线炒作吗? 您很有可能在npm中从未遇到过这些问题。 在本文中,我们将比较npm和Yarn,以便您可以确定最适合您的。

纱线徽标

纱线与npm:功能差异

乍一看,Yarn和npm看起来很相似。 当我们在内部窥视时,我们意识到使纱线与众不同的原因。

yarn.lock文件

package.json ,npm和Yarn都可以跟踪项目的依赖关系的文件中,版本号并不总是准确的。 相反,您可以定义一系列版本。 这样,您可以选择软件包的特定主要版本和次要版本,但允许npm安装可能修复某些错误的最新补丁。

在理想的语义版本控制世界中,补丁发布不会包含任何重大更改。 不幸的是,这并不总是正确的。 npm所采用的策略可能导致两台机器具有相同的package.json文件,安装了不同版本的软件包,可能会引入错误。

为避免软件包版本不匹配,将精确安装的版本固定在锁定文件中。 每次添加模块时,Yarn都会创建(或更新) yarn.lock文件。 这样,您可以保证另一台机器安装了完全相同的软件包,同时仍在package.json定义了一系列允许的版本。

在npm中, npm shrinkwrap命令也会生成一个锁定文件,并且npm install在读取package.json之前先读取该文件,就像Yarn首先读取yarn.lock 。 这里的重要区别是,Yarn始终创建和更新yarn.lock ,而npm默认情况下不创建一个,而仅在存在时更新npm-shrinkwrap.json

  1. yarn.lock文档
  2. NPM收缩包装文档

并行安装

每当npm或Yarn需要安装软件包时,它都会执行一系列任务。 在npm中,这些任务是按包依次执行的,这意味着它将等待包完全安装后再继续执行下一个。 Yarn并行执行这些任务,从而提高了性能。

为了进行比较,我使用npm和Yarn安装了Express软件包,但没有使用wrapw / lock文件并使用了干净的缓存。 总共安装42个软件包。

  • npm:9秒
  • 纱线:1.37秒

我简直不敢相信自己的眼睛。 重复这些步骤会产生相似的结果。 然后,我安装了gulp软件包,产生了195个依赖项。

  • npm:11秒
  • 纱:7.81秒

似乎差异密切取决于要安装的软件包的数量。 无论哪种方式,Yarn始终都更快。

清洁输出

默认情况下,npm非常详细。 例如,当运行npm install <package>时,它将递归列出所有已安装的软件包。 另一方面,纱线一点也不冗长。 当可以通过其他命令获取详细信息时,它会列出带有适当表情符号的信息(除非您使用的是Windows)少得多。

“ yarn install”命令的输出

纱线与npm:CLI差异

除了某些功能差异外,Yarn还具有不同的命令。 删除了一些npm命令,对其他命令进行了修改,并添加了一些有趣的命令。

全球纱线

与npm不同,在npm中,使用-g--global标志执行全局操作,而Yarn命令需要以global为前缀。 就像npm一样,不需要全局安装特定于项目的依赖项。

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文件中,就像npm的--save标志一样。 Yarn的--dev标志将软件包添加为开发人员依赖项,就像npm的--save-dev标志一样。

  1. 纱线添加文件
  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命令根据package.json设置的依赖yarn generate-lock-entry生成yarn.lock文件。 这类似于npm shrinkwrap 。 请谨慎使用该命令,因为在通过yarn addyarn upgrade添加和升级依赖项时,会自动生成并更新锁定文件。

  1. 纱线生成锁入口文档
  2. NPM收缩包装文档

稳定性和可靠性

纱线炒作列车会脱轨吗? 在发布给公众的第一天,它确实收到了很多问题报告 ,但是已解决问题的比率也令人震惊。 两者都表明社区正在努力寻找并消除错误。 从问题的数量和类型来看,Yarn对于大多数用户而言似乎很稳定,但可能不适合极端情况。

请注意,尽管包管理器可能对您的项目至关重要,但它只是一个包管理器。 如果出现问题,重新安装软件包应该不会很困难,也不会恢复为npm。

未来

也许您知道Node.js和io.js之间的历史。 回顾一下:io.js是Node.js的一个分支,它是由一些核心贡献者在对项目的治理有分歧之后创建的。 相反,io.js选择了开放式管理。 在不到一年的时间里,两个团队达成了协议,io.js被合并回Node.js,而前者则被终止。 无论是非是非,这都为Node.js引入了许多很棒的功能。

我看到npm和Yarn的模式相似。 尽管Yarn不是一个分支,但是它改善了npm的一些缺陷。 如果npm从中吸取教训并要求Facebook,Google和其他Yarn贡献者帮助改善npm,这不是很酷吗? 尽管现在说这种情况还为时过早,但我希望会发生。

无论哪种方式,Yarn的前景都是光明的。 社区似乎很兴奋,并且很好地接受了这个新的软件包管理器。 不幸的是,没有可用的路线图,所以我不确定Yarn为我们带来什么惊喜。

结论

与npm相比,Yarn得分更高的默认值。 我们免费获得一个锁文件,安装软件包的速度非常快,它们会自动存储在package.json 。 安装和使用Yarn的影响也很小。 您可以仅在一个项目上尝试它,然后查看它是否对您有用。 这使Yarn成为npm的理想替代品。

我绝对建议迟早在单个项目上尝试使用Yarn。 如果您对安装和使用新软件持谨慎态度,请花几个月的时间。 毕竟,npm经过了实战测试,在软件开发领域绝对值得。

如果您碰巧发现自己在等待npm完成安装软件包,那可能是阅读迁移指南的最佳时机;)

你怎么看? 您已经在使用Yarn吗? 您愿意尝试一下吗? 还是这只是在加剧本已分散的生态系统的碎片化? 在下面的评论中让我知道。

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

这篇关于纱线与npm:您需要知道的一切的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/420739

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

js基础需要注意的点

1 js中单引号和双引号都能创建字符串,但是html的元素属性规定必须用双引号,所以js优先用单引号定义字符串。

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这

作为刚从事Java开发的小白,需要掌握哪些技能

作为一个刚踏入Java开发世界的小白,面对各种技术和工具,你可能会觉得有点不知所措。但是别担心,我会给你一个简单清晰的路线图,让你可以有条不紊地掌握基本技能,逐步成长为一名Java开发者。 1. 扎实的Java基础 Java的基础是你迈向高级开发的重要基石,建议从以下几个方面着手: 语法和基础概念:比如变量、条件语句、循环、方法、数组、面向对象编程(OOP)等等。这些基础如同建房子的地基,越

xml数据作为表单参数在网络传递也需要用urlencode处理

xml数据作为表单参数在网络传递也需要用urlencode处理。才能确保数据被正确的传递和解析。需要加深对数据在web上传递的理解。

url参数中带有号,需要用先把url做个解析,使其方便在网络上传递

需求:提交异步通知地址给宝付的投标接口,发现投标成功后,异步通知地址没有被调用 排查:通过和宝付技术对接,发现是203,地址重定向错误。深入排查,发现异步通知返回的地址中&号之后的参数宝付没有收到 结论:表单提交的参数中的异步通知地址中的&号没有做urlencode()处理导致传递丢失参数。 地址参数中带有&号,java在做提交的时候,不能正确传递&,导致地址中&之后的内容丢失。故此需要ur