Yarn和 NPM有什么区别?在写这个问题的时候,我只能在 Internet 上找到一些文章,显示像这样的 NPM 命令的 Yarn 等价物是什么。
它们是否具有相同的功能(我知道 Yarn 会进行本地缓存,并且看起来您只需要下载一次包)但除此之外,从 NPM 迁移到 Yarn 还有什么好处?
从版本 5 开始,npm
package-lock.json
来修复整个依赖树,就像纱线(或任何其他)锁定机制一样,--save
现在暗示为npm i
npm 5.7.0 进一步引入了npm ci
在持续集成环境中通过仅安装找到的包来更快地安装依赖项的命令(如果和不同步package-lock.json
则报告错误)。package-lock.json
package.json
我个人还是用npm
的。
我不愿意直接从文档中引用,但他们很好地解释了原因,简洁到我看不出如何进一步总结这些想法。
大部分:
你总是知道你在每台开发机器上得到同样的东西
它将npm
没有的操作并行化,并且
它可以更有效地利用网络。
它还可以更有效地利用其他系统资源(例如 RAM)。
人们对它有哪些生产经验?谁知道呢,对普通大众来说,它是个婴儿。
从一开始,Yarn 锁定文件就保证了在同一个存储库上重复运行 yarn 会产生相同的包。
其次,Yarn 尝试使用冷缓存来获得良好的性能,尤其是使用暖缓存。
最后,Yarn 让安全成为核心价值。
“<a href="https://shift.infinite.red/npm-vs-yarn-cheat-sheet-8755b092e5cc" rel="noreferrer">NPM 与纱线备忘单”,作者 Gant Laborde
快速:Yarn 缓存它下载的每个包,因此它永远不需要再次缓存。它还并行化操作以最大限度地利用资源,因此安装时间比以往任何时候都快。
可靠:使用详细但简洁的锁定文件格式和确定性的安装算法,Yarn 能够保证在一个系统上运行的安装将在任何其他系统上以完全相同的方式运行。
安全:在执行代码之前,Yarn 使用校验和来验证每个已安装包的完整性。
- 离线模式:如果您以前安装过一个软件包,您可以在没有任何互联网连接的情况下再次安装它。
- 确定性:无论安装顺序如何,都将在每台机器上以相同的方式安装相同的依赖项。
- 网络性能:Yarn 有效地将请求排队并避免请求瀑布,以最大限度地提高网络利用率。
- 多个注册表:从 npm 或 Bower 安装任何包,并保持包工作流程相同。
- 网络弹性:单个请求失败不会导致安装失败。请求在失败时重试。
- 平面模式:将不匹配的依赖版本解决为单个版本,以避免创建重复。
- 更多表情符号。
pnpm
使用硬链接和符号链接在磁盘上只保存一次模块的一个版本。例如,当使用 npm 或 Yarn 时,如果您有 100 个项目使用相同版本的 lodash,那么磁盘上将有 100 个 lodash 副本。使用 pnpm,lodash 将保存在磁盘上的单个位置,并且硬链接会将其放入应该安装的 node_modules 中。
结果,您节省了数千兆字节的磁盘空间,并且安装速度大大加快!如果您想了解有关 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
试图为初学者提供更好的概述。
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 年):Yarn一个更快、更安全、更可靠的 JavaScript 包管理器。
您可以通过键入以下内容将Yarn添加到项目中:
yarn init
这将创建一个package.json
文件。然后,安装依赖项:
yarn install
node_modules
将生成一个文件夹。Yarn还会生成一个名为yarn.lock
. 该文件的用途与 相同,package-lock.json
但使用确定性和可靠的算法构建,从而导致一致的构建。
如果您使用npm启动项目,您实际上可以轻松迁移到Yarn。纱线会消耗相同的package.json
。有关详细信息,请参阅从 npm 迁移。
但是,每个新版本都对npm进行了改进,一些项目仍然使用npm而不是yarn。
@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(没用过)。
npm:
纱线:
当您使用 Yarn(使用 yarn add packagename)安装包时,它会将包放在您的磁盘上。在下一次安装期间,将使用此包而不是发送 HTTP 请求以从注册表中获取 tarball。
Yarn 带有一个方便的许可证检查器,如果你必须检查你所依赖的所有模块的许可证,它会变得非常强大。
如果您正在开发专有软件,那么您使用哪一个并不重要。使用 npm,你可以使用 npm-shrinkwrap.js,而你可以使用 yarn.lock 和 Yarn。
有关更多信息,请阅读以下博客
https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/