Yarn和NPM有什么区别?在撰写此问题时,我只能在Internet上找到一些文章,显示像这样的NPM命令的Yarn等效项。
它们是否具有相同的功能(我知道Yarn会进行本地缓存,并且看起来您只需要下载一次软件包),但是除此之外,从NPM迁移到Yarn还有其他好处吗?
Yarn和NPM有什么区别?在撰写此问题时,我只能在Internet上找到一些文章,显示像这样的NPM命令的Yarn等效项。
它们是否具有相同的功能(我知道Yarn会进行本地缓存,并且看起来您只需要下载一次软件包),但是除此之外,从NPM迁移到Yarn还有其他好处吗?
Answers:
从版本5开始, npm
package-lock.json
,该文件将修复整个依赖关系树,其方式与yarn(或其他任何一种)锁定机制相同,--save
现在暗示 npm i
npm 5.7.0进一步引入了此npm ci
命令,该命令通过仅安装在中发现的软件包来在连续集成环境中更快地安装依赖项package-lock.json
(如果package-lock.json
和package.json
不同步,则报告错误)。
我个人仍然使用npm
。
我不愿直接从文档中引用,但是他们在解释原因方面做得非常出色,简明扼要,以至于我看不到如何进一步总结思想。
大部分:
您总是知道您在每台开发机器上都能获得相同的东西
它将npm
没有的操作并行化,并且
它可以更有效地利用网络。
它还可以更有效地利用其他系统资源(例如RAM)。
人们对此有什么生产经验?谁知道,这是普通大众的婴儿。
从一开始,Yarn锁定文件可确保在同一存储库上重复运行yarn会产生相同的程序包。
其次,Yarn尝试在冷缓存(尤其是热缓存)下具有良好的性能。
最后,Yarn将安全性作为核心价值。
Gant Laborde的“ NPM vs纱线备忘单 ”
快速:Yarn缓存它下载的每个软件包,因此不再需要。它还并行化操作以最大程度地利用资源,因此安装时间比以往任何时候都快。
可靠:Yarn使用详细但简洁的锁定文件格式和确定性的安装算法,可以保证在一个系统上运行的安装在任何其他系统上的运行方式完全相同。
安全:Yarn使用校验和在执行每个已安装程序包的代码之前验证其完整性。
- 脱机模式:如果您以前安装过软件包,则可以在没有任何互联网连接的情况下再次安装它。
- 确定性:无论安装顺序如何,都将在每台计算机上以相同的精确方式安装相同的依赖项。
- 网络性能:Yarn有效地将请求排队,并避免请求瀑布,以最大化网络利用率。
- 多个注册表:从npm或Bower安装任何软件包,并保持软件包工作流程不变。
- 网络弹性:单个请求失败不会导致安装失败。失败时重试请求。
- 扁平模式:将不匹配的依赖项版本解决为单个版本,以避免创建重复项。
- 更多表情符号。🐈
--flat
选项可以强制采用真正的平面结构,其中每个依赖项只能安装一个版本,但是此选项的默认行为是什么?谢谢。
install -g
。
npm:
纱线:
pnpm
使用硬链接和符号链接仅一次将模块的一个版本保存在磁盘上一次。例如,当使用npm或Yarn时,如果有100个项目使用相同版本的lodash,则磁盘上将有100个lodash副本。使用pnpm,lodash将保存在磁盘上的单个位置,并且硬链接会将其放入应该安装它的node_modules中。
结果,您在磁盘上节省了数GB的空间,并且安装速度大大提高了!如果您想了解有关pnpm创建的唯一的node_modules结构以及为什么它可以在Node.js生态系统中正常工作的更多详细信息,请阅读这篇小文章:我们为什么要使用pnpm?
npm install -g pnpm
pnpm install -g typescript // or your desired package
PNPM
超过Yarn
和的好处NPM
下面是进度条表示采取了安装时间NPM
,YARN
和PNPM
(较短巴为佳)
有关更多详细信息,请访问https://www.npmjs.com/package/pnpm
当您使用Yarn安装软件包(使用yarn添加软件包名称)时,它将软件包放置在磁盘上。在下一次安装期间,将使用此软件包,而不是发送HTTP请求以从注册表获取tarball。
Yarn带有一个方便的许可证检查器,如果您必须检查所依赖的所有模块的许可证,它可以变得非常强大。
如果您使用的是专有软件,那么使用哪个软件都没有关系。使用npm,可以使用npm-shrinkwrap.js,而可以将Yarn.lock与Yarn一起使用。
有关更多信息,请阅读以下博客
https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/
试图为初学者提供更好的概述。
npm一直是(2010年)最受欢迎的JavaScript软件包管理器。如果要使用它来管理项目的依赖项,则可以键入以下命令:
npm init
这将生成一个package.json
文件。它包含项目的所有依赖项。
然后
npm install
将创建一个目录node_modules
并下载其中的依赖项(添加到package.json
文件中)。
它还将创建一个package-lock.json
文件。此文件用于描述生成的依存关系树。它允许开发人员完全安装相同的依赖项。例如,您可以想象有一个开发人员将某个依赖关系升级到v2,然后再升级到v3,而另一个直接将其升级到v3。
npm以不确定的方式安装依赖项,这意味着两个开发人员可能拥有不同的node_modules
目录,从而导致不同的行为。** npm的信誉很差,例如2018年2月:在5.7.0版本中发现了一个问题,其中在Linux系统上运行sudo npm会更改系统文件的所有权,从而永久破坏操作系统。
要解决这些问题和其他问题,Facebook的推出了全新的包管理器(2016):纱一个更快,更安全,更可靠的软件包管理器对JavaScript。
您可以通过输入以下命令将Yarn添加到项目中:
yarn init
这将创建一个package.json
文件。然后,使用以下命令安装依赖项:
yarn install
node_modules
将生成一个文件夹。Yarn还将生成一个名为的文件yarn.lock
。该文件的作用与相同,package-lock.json
但使用确定性和可靠的算法构造,因此可生成一致的版本。
如果您使用npm启动了一个项目,那么实际上可以轻松地迁移到Yarn。纱线会消耗相同的package.json
。有关更多详细信息,请参见从npm迁移。
然而,NPM已经随着每个新版本的提高,有些项目仍然使用NPM超过纱。
@msanford的回答几乎涵盖了所有内容,但是,我缺少安全性(OWASP的已知漏洞)部分。
纱
您可以使用来检查它们yarn audit
,但是无法修复它们。这在GitHub(https://github.com/yarnpkg/yarn/issues/7075)上仍然是一个未解决的问题。
npm
您可以使用npm audit fix
,因此可以自己修复其中的一些。
他们两个,即npm audit
:yarn audit
有自己的持续集成工具。它们分别是https://github.com/IBM/audit-ci(使用,效果很好!)和https://yarnpkg.com/package/audit-ci(尚未使用)。