npm 和 yarn 你选哪个?

更新日期: 2019-11-19阅读: 2.2k标签: yarn

每个团队都必须在开发过程中做出各种决定。其中通常会涉及到 yarn,npm 或其它用于构建和打包 javascript 代码工具。一些开发人员渴望朝着某个方向前进,有时他们会花费大量时间来尝试,去做出实际上对他们的工作几乎没有什么影响的决策。

首先,要了解为什么要做出一个有趣的决定,我们需要看一下 javascript 中包管理的历史。


npm 出现之前前端依赖项是保存到存储库中并手动下载的
2010:npm 发布并支持 nodejs
2012:npm 的使用量急剧增加——主要是由于 Browserifys 浏览器的支持
2012:npm 有了一个竞争对手 bower,它完全支持浏览器2012-2016:前端项目的依赖项数量成倍增加
2012-2016:构建和安装前端应用变得越来越慢
2012-2016:大量(重复的)依赖项存储在神奇的 node_modules 内的嵌套文件夹中☢️2012-2016:rm -rf node_modules 成为前端开发人员最常用的命令。 
2015:bower 输给了 npm 
2015:node_modules 被修改为扁平化的文件结构! 
2016: left-pad成为当时的新闻头条 

2016: yarn 发布

支持 npm 和 bower 仓库yarn.lock 能够锁定安装的版本并提供确定性的依赖关系。不再 rm -rf node_modules!yarn install 花费的时间是 npm install 的一半(不使用缓存的前提下)缓存和脱机模式使构建过程几乎不花费时间

2016:npm 发布 shrinkwrap

尝试处理依赖项锁定不幸的是,一些错误和超出其管理能力的承诺导致该工具的声誉下降

2017:npm 5 发布

package-lock.json 是他们的新工具,shrinkwrap 被放在一边package-lock.json 开始与 yarns 锁定文件竞争

2018:npm ci 发布

直接用 package-lock.json 构建代码没有代价高昂的依赖项安全性分析和版本分析大大减少了在构建服务器上的构建时间!

2018:npm 6 发布

npm 检查要安装的依赖项中的安全漏洞yarn 和 npm 的构建时间不再有显差异

2019:tink 开始进入 beta 模式

避免使用 node_modules,而是为项目中的每个依赖项创建一个带有哈希值的文件尚未做好投入生产环境的准备...

哎... 

如我们所见,yarn 发布后,npm 受到启发(并被迫?)开发了许多好的工具和机制。 yarn 因为解决了与 npm 相关的一些重要问题而倍受赞誉,并在 2016 年开始向竞争对手施加压力。包的处理速度、安全性和确定性是必不可少的功能,它们使当今的开发人员能够专注于创造价值,而且并不为这两种工具进行争吵。


结论 

为了方便起见,我建议大多数团队(必须做出许多其他更重要的技术决定)选择最简单的选项 —— npm。它随 node 一起提供,目前能以足够好的方式处理包管理。


总是有例外吗? 

当使用 monorepo 时,yarn workspaces 是一种流行的替代方案,而 npm 则没有提供等效的替代方法。 lerna 是一个软件包,它还支持 monorepos 的使用,并且可以与 npm 和 yarn(带有 workspaces)一起使用。


pnpm 

PS:应该提到的是, pnpm 是包管理器的第三种选择。如果 pnpm 的卖点是如果包已经下载到本地的一个存储库中,则它就不会再次下载了——这类似于 Java 中的 maven 依赖管理。在撰写本文时,pnpm 还不如 yarn 或 npm 成熟,也不能投入生产环境。

原文:https://javascript.christmas/2019/10/


链接: https://www.fly63.com/article/detial/6919

Yarn vs npm: 你需要知道的一切

Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。它的目的是解决这些团队使用 npm 面临的少数问题,即:安装的时候无法保证速度/一致性,安全问题,因为 npm 安装时允许运行代码

yarn和npm的区别对比_比较npm和yarn 命令行

npm 是目前js最流行的包管理工具,通过 npm 可以安装、共享、分发代码,管理项目依赖关系。Yarn 是为了弥补 npm 的一些缺陷而出现的,Yarn 定位为快速、可靠、安全的依赖管理工具。

通过npm或yarn自动生成vue组件

不知道大家每次新建组件的时候,是不是都要创建一个目录,然后新增一个.vue文件,然后写template、script、style这些东西,如果是公共组件,是不是还要新建一个index.js用来导出vue组件

Bun 炒作的太火了,不过是另一个 yarn 的故事?

我们又要犯同样的错误了。我经常被提醒,每 5 年世界上的程序员数量就会翻一番,这意味着任何时候,有 50%的行业人员经验都不到 5 年。这可能就是为什么我们会一次又一次地被类似 Bun 这样的东西搅局的原因

Windows下Yarn安装与使用

输入yarn -version 可以看到版本号,说明安装成功了。我们就可以在项目中像使用npm一样使用yarn了

细说包管理器yarn和npm

在过去,一个简单的文本编辑器就足以让开发人员创建和管理大部分项目。但从那以后,WEB发生了翻天覆地的变化,如今,即使是一个相当简单的项目,通常也会有成百上千个带有复杂嵌套依赖关系的脚本,如果没有自动化工具,这些脚本根本无法有序的管理,这时就需要包管理器。

清除npm/yarn缓存包

我们平时在使用npm命令或者yarn命令的时候,有时会在本地缓存一些包,导致本地电脑硬盘占用率增加。 由于杀毒软件的扫描,某些软件包可能会丢失某些文件。 这时候npm 使用本地包的话,就会导致我们的项目无法运行

升级 Yarn 2,大规模瘦身 node_modules

node项目中最臭名昭著的莫过于node_modules文件夹,这个糟糕的结构动辄使你的文件数目增加几万甚至几十万,无论是安装还是删除,都要消耗大量时间,并且占据大量inode结点,我们随便进入一个react项目文件夹

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!