作者:Charlie Midtlyng
翻译:疯狂的技术宅
原文:https://javascript.christmas/2019/10未经允许严禁转载

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

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

  • npm 出现之前:前端依赖项是保存到存储库中并手动下载的
  • 2010npm 发布并支持 nodejs
  • 2012npm 的使用量急剧增加——主要是由于 Browserifys 浏览器的支持
  • 2012npm 有了一个竞争对手 bower,它完全支持浏览器
  • 2012-2016:前端项目的依赖项数量成倍增加
  • 2012-2016:构建和安装前端应用变得越来越慢
  • 2012-2016:大量(重复的)依赖项存储在神奇的 node_modules 内的嵌套文件夹中☢️
  • 2012-2016rm -rf node_modules 成为前端开发人员最常用的命令。
  • 2015bower 输给了 npm
  • 2015node_modules 被修改为扁平化的文件结构!
  • 2016left-pad成为当时的新闻头条
  • 2016yarn 发布
  • 支持 npmbower 仓库
  • yarn.lock 能够锁定安装的版本并提供确定性的依赖关系。不再 rm -rf node_modules
  • yarn install 花费的时间是 npm install 的一半(不使用缓存的前提下)
  • 缓存和脱机模式使构建过程几乎不花费时间
  • 2016npm 发布 shrinkwrap
  • 尝试处理依赖项锁定
  • 不幸的是,一些错误和超出其管理能力的承诺导致该工具的声誉下降
  • 2017npm 5 发布
  • package-lock.json 是他们的新工具,shrinkwrap 被放在一边
  • package-lock.json 开始与 yarns 锁定文件竞争
  • 2018npm ci 发布
  • 直接用 package-lock.json 构建代码
  • 没有代价高昂的依赖项安全性分析和版本分析
  • 大大减少了在构建服务器上的构建时间!
  • 2018npm 6 发布 ‍♀️
  • npm 检查要安装的依赖项中的安全漏洞
  • yarnnpm 的构建时间不再有显差异
  • 2019tink 开始进入 beta 模式
  • 避免使用 node_modules,而是为项目中的每个依赖项创建一个带有哈希值的文件
  • 尚未做好投入生产环境的准备
  • ...

哎...

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

结论

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

总是有例外吗?

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

pnpm

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

欢迎扫描下方二维码,免费领取 Vue 性能优化课程。

npm 删除依赖包_npm 和 yarn 你选哪个?相关推荐

  1. npm 删除依赖包_前端开发,npm会了吗?

    npm 是Node.js的包管理工具(package manager),npm 由三个独立的部分组成: 网站(开发者查找包,设置参数以及管理npm的主要途径) 注册表(保存每个包(package)的信 ...

  2. npm更新依赖包到最新版本

    更新依赖包到最新版本 npm install 依赖包名称@latest -D 查看最新版本 npm info 依赖包名称 version(查看当前最新版本) npm info 依赖包名称 versio ...

  3. npm安装指定版本包,npm按版本安装;npm删除依赖,卸载依赖

    1.npm中安装指定的版本号,格式为 '包名@版本号' npm install --save 包名称@版本号 例如安装element-ui的2.15.8版本 npm install --save el ...

  4. npm升级依赖包_Taro跨端开发之依赖管理

    昨天跑的好好项目,今天跑不起来 我们在开发周期比较长的前端项目的时候,必然会遇到依赖管理的问题. 我们在开发项目的时候,我们用了大量的三方库.这些三方的依赖库时不时的会更新自己的代码. 第三方依赖库的 ...

  5. npm 下载 依赖包时出错的解决方式

    文章内容输出来源:拉勾教育 大前端高薪训练营 推荐尽量使用 npm ,新版 npm 不比 yarn 差 一.设置 npm 镜像源 设置为国内镜像源 npm config set registry ht ...

  6. npm安装依赖包报错

    最近在新下载了一个项目,需要 npm i 下载依赖,,但是一直报错,, 首先用cnpm源下载 $ npm install -g npm npm ERR! code E500 npm ERR! 500 ...

  7. npm 删除已安装的依赖

    npm uninstall XXX -S  卸载XXX依赖 npm安装依赖 [npm install xxx]利用 npm 安装xxx依赖到当前命令行所在目录 [npm install xxx -g] ...

  8. 如何使用npm更新项目依赖包

    NPM(Node Package Manager,结点包管理)是一款用于管理 Node.js 依赖包的工具.通过 NPM,开发者可以快速地安装.卸载.更新等项目所需的依赖包,从而有效提高开发效率.节省 ...

  9. maven引入hadoop_Maven引入hadoop依赖包出错解决办法

    错误: ArtifactTransferException: Failure to transfer org.apache.hadoop:hadoop-hdfs:jar:2.6.0 from http ...

最新文章

  1. Github高级搜索技巧
  2. 好污!杜蕾斯:一份2017年度账单和床上总结求认领...
  3. web高德地图怎么加载离线地图_怎么验证全国离线卫星地图缓存文件的完整性
  4. 使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...
  5. Linux VMware 快照不准,VmWare Workstation 关于Linux 虚拟机快照或克隆后 识别不到网卡问题...
  6. Spring系列:学习Spring的资源和讨论
  7. IMX8基于FFT的GPU和CPU的性能测试
  8. 深度操作系统20.2.2 发布(国产系统也可以安装安卓应用了)
  9. 网站Banner的代码
  10. 【C++】 bin文件转换成txt文件
  11. 计算机编程情话,程序员的土味情话~(表白代码第二波)
  12. 小米红米手机root刷机教程
  13. (2020.9.28)面试记录:软件测试实习生--面试记录
  14. 红旗linux考试,红旗Linux认证考试介绍
  15. scaffold-dbcontext 命令使用说明
  16. javaweb面向对象
  17. 我的JavaScript学习笔记续
  18. 【ES6】ES6超详讲解(@_@;)
  19. WBSC 世界棒垒球总会·美洲
  20. matlab所有峰值,局部最大

热门文章

  1. Linux学习笔记 文件服务Vsftp详细介绍
  2. 在Java中如何从一个多层嵌套循环中直接跳出?
  3. spring-boot使用教程(一):让程序跑起来
  4. acm 凹多边形面积_解析几何|面积的计算
  5. mongodb数据库扩展名_MongoDB权威指南
  6. JAVA jdk安装
  7. hihoCoder1690 (动态规划)
  8. bubbo调用Failed to invoke remote method异常解决
  9. 《想吃麻花现给你拧》
  10. playframework 打包在tomcat里部署