Yarn 和 NPM 有什么区别?在写这个问题的时候,我只能在 Internet 上找到一些文章,显示像 this 这样的 NPM 命令的 Yarn 等价物是什么。
它们是否具有相同的功能(我知道 Yarn 会进行本地缓存,并且看起来您只需要下载一次包)但除此之外,从 NPM 迁移到 Yarn 还有什么好处?
更新:2018 年 3 月(有点晚了……)
从版本 5 开始,npm
生成一个名为 package-lock.json 的“锁定文件”,它可以像纱线(或任何其他)锁定机制一样修复整个依赖树,
制作了一个工具
--save 现在隐含在 npm i 中
更好的网络和缓存使用
npm 5.7.0 further introduced npm ci
命令通过仅安装在 package-lock.json
中找到的包来更快地在持续集成环境中安装依赖项(如果 package-lock.json
和 package.json
不同步则报告错误)。
就个人而言,我仍然使用 npm
。
原来的
我不愿意直接从文档中引用,但他们很好地解释了原因,简洁到我看不出如何进一步总结这些想法。
大部分:
你总是知道你在每台开发机器上都得到了同样的东西它并行化了 npm 没有的操作,它更有效地利用了网络。它还可以更有效地利用其他系统资源(例如 RAM)。
人们对它有哪些生产经验?谁知道呢,对普通大众来说,它是个婴儿。
TL;来自 Yehuda Katz 的博士:
从一开始,Yarn 锁定文件就保证了在同一个存储库上重复运行 yarn 会产生相同的包。其次,Yarn 尝试使用冷缓存来获得良好的性能,尤其是使用暖缓存。最后,Yarn 让安全成为核心价值。
不错的博文
Gant Laborde 的“NPM vs Yarn Cheat Sheet”
项目中稍长的版本:
快速:Yarn 缓存它下载的每个包,因此它永远不需要再次缓存。它还并行化操作以最大限度地利用资源,因此安装时间比以往任何时候都快。可靠:使用详细但简洁的锁定文件格式和确定性的安装算法,Yarn 能够保证在一个系统上运行的安装将在任何其他系统上以完全相同的方式运行。安全:在执行代码之前,Yarn 使用校验和来验证每个已安装包的完整性。
从 README.md 中:
离线模式:如果您以前安装过一个软件包,您可以在没有任何互联网连接的情况下再次安装它。确定性:无论安装顺序如何,都将在每台机器上以相同的方式安装相同的依赖项。网络性能:Yarn 有效地将请求排队并避免请求瀑布,以最大限度地提高网络利用率。多个注册表:从 npm 或 Bower 安装任何包,并保持包工作流程相同。网络弹性:单个请求失败不会导致安装失败。请求在失败时重试。平面模式:将不匹配的依赖版本解决为单个版本,以避免创建重复。更多表情符号。 🐈
什么是 PNPM?
pnpm
使用硬链接和符号链接在磁盘上只保存一次模块的一个版本。例如,当使用 npm 或 Yarn 时,如果您有 100 个项目使用相同版本的 lodash,那么磁盘上将有 100 个 lodash 副本。使用 pnpm,lodash 将保存在磁盘上的一个位置,并且硬链接会将其放入应该安装的 node_modules 中。
结果,您节省了数千兆字节的磁盘空间,并且安装速度大大加快!如果您想详细了解 pnpm 创建的独特 node_modules 结构以及它为何能与 Node.js 生态系统完美配合,请阅读这篇小文章:Why should we use pnpm?
如何安装 PNPM?
npm install -g pnpm
如何使用 PNPM 安装 npm 包?
pnpm install -g typescript // or your desired package
PNPM 相对于 Yarn 和 NPM 的优势
https://i.stack.imgur.com/p38rV.png
点击查看完整检查基准
有关详细信息,请访问 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 introduced a new package manager (2016):Yarn 是一个 更快、更安全、更可靠 的 JavaScript 包管理器。
您可以通过键入以下内容将 Yarn 添加到项目中:
yarn init
这将创建一个 package.json
文件。然后,安装依赖项:
yarn install
将生成文件夹 node_modules
。 Yarn 还会生成一个名为 yarn.lock
的文件。此文件的用途与 package-lock.json
相同,但使用确定性和可靠的算法构建,从而导致一致的构建。
如果您使用 npm 启动项目,您实际上可以轻松迁移到 Yarn。 yarn 将消耗相同的 package.json
。有关详细信息,请参阅 Migrating from npm。
但是,每个新版本都对 npm 进行了改进,并且一些项目仍然使用 npm over 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:
JavaScript 的包管理器。 npm 是 npm 生态系统的命令行界面。它经过实战考验,出奇的灵活,每天被成千上万的 JavaScript 开发人员使用。 NPM 生成正确的锁定文件,而 Yarn 锁定文件在某些情况下可能已损坏,必须使用 yarn-tools 修复
纱:
一个新的 JavaScript 包管理器。 Yarn 会缓存它下载的每个包,因此它永远不需要再次缓存。它还并行化操作以最大限度地利用资源,因此安装时间比以往任何时候都快。 Yarn 不支持使用密码登录(而 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/
纱
优点::
支持并行安装和零安装等功能可提高性能
更安全
庞大的活跃用户社区
缺点::
不适用于旧版本的 Node.js(低于版本 5)
安装本机模块的问题
新PM
优点::
易于使用,尤其适用于使用旧版本的开发人员。
优化本地包安装,节省硬盘空间。
缺点::
安全漏洞仍然存在
结论:
Yarn 比 NPM 好吗?
在速度和性能方面,Yarn 比 NPM 更好,因为它执行并行安装。 Yarn 仍然比 NPM 更安全。但是,Yarn 使用的磁盘空间比 NPM 多。
不定期副业成功案例分享
--flat
选项强制使用 real 平面结构,其中每个依赖项只允许安装一个版本,但默认行为是什么?谢谢。install -g
的语法之前为 npm 做出贡献。