包管理工具npm和Yarn的区别,我们该如何选择?

管理工具,npm,yarn,区别,我们,如何,选择 · 浏览次数 : 368

小编点评

**什么是包管理器?** 包管理器(Package Manager)是用于管理项目所需的工具,它可以帮助开发者管理他们的依赖项和构建项目。常用的包管理器包括npm和yarn。 **npm 的优点:** * 包素易用,快速安装 * 支持并行安装 * 提供本地缓存 * 具有完善的社区支持和文档 **yarn 的优点:** * 性能更快 * 支持精确的依赖管理 * 团队合作更方便 * 拥有更大的社区和文档资源 **选择一个包管理器:** * 性能需求:如果你对构建速度和依赖包下载速度有较高的需求,可以使用Yarn。 * 生态系统和兼容性:Npm 是JavaScript生态系统的默认选择,很多项目都使用Npm作为包管理工具,并且它与其他工具和服务的兼容性较好。 * 社区支持和文档:Npm和Yarn都有庞大的社区和文档资源,但是Npm在这方面可能更加成熟和全面。 * 团队合作:如果你在一个团队中工作,建议与团队成员协商并讨论选择。

正文

好家伙,学习新工具 

 

1.为什么我们需要包管理器?

关于npm我们已经知道了,这是我们项目的包管理器,

我们现在用的无比顺手的工具,都是在无数的竞争中杀出来的,他们淘汰了无数的产品

 

首先,倘若我们不使用npm,那么我们应该如何去新建一个前端项目?

纯手工,把我们项目需要的项目一个个下载到我们的项目里面

手动创建项目意味着您需要手动管理项目的依赖和文件结构,包括下载和引入任何所需的库或框架。

想想都可怕,再加上各种bug

我们新建一个项目可能需要?半个小时左右

 

于是我们的好帮手出现了,包管理器npm

 

我们把我们的配置清单给npm,随后,npm帮我们下载我们项目依赖的包

于是我们从30分钟优化到1分钟

npm真是太伟大了

 

2.NPM出现问题

但随后,NPM又出现了一些问题

 

2.1.安装太慢

新项目拿到手,安装依赖太慢

npm install

 

npm 2会安装每一个包所依赖的所有依赖项。如果我们有这么一个项目,它依赖项目A,项目A依赖项目B,项目B依赖项目C,那么依赖树将如下所示:

node_modules
- package-A
-- node_modules
--- package-B
----- node_modules
------ package-C
-------- some-really-really-really-long-file-name-in-package-c.js

 

这个结构可能会很长。这对于Windows来说却是个破坏性的东西,因为有很多程序无法处理超过260个字符的文件路径名。

npm 3采用了扁平依赖关系树来解决这个问题,所以我们的3个项目结构现在看起来如下所示:

node_modules
- package-A
- package-B
- package-C
-- some-file-name-in-package-c.js
这样,一个原来很长的文件路径名就从./node_modules/package-A/node_modules/package-B/node-modules/some-file-name-in-package-c.js
变成了/node_modules/some-file-name-in-package-c.js。

这种方法的缺点是,npm必须首先遍历所有的项目依赖关系,然后再决定如何生成扁平的node_modules目录结构。

npm必须为所有使用到的模块构建一个完整的依赖关系树,这是一个耗时的操作,是npm安装速度慢的一个很重要的原因。

 

2.2.无法保持一致性

想像一下去和小黄一起开发一个项目登陆页面,然后,你们在不同的时间安装了依赖包,

而碰巧,其中一个包更新了,14.2.1变成了14.2.2,或许是其中的一个组件框的样式改变了,

于是你会发现,你两的项目跑起来会有微妙的差别,当然了,也有可能是其他的各种各样严重的bug

总之,依赖包的版本不统一,是一个非常大的问题,可能会导致严重的问题

 

3.Yarn出现

于是针对这两个问题,

Yarn出现了,他很好地解决的npm存在的一些问题

yarn更快(为什么?)

1.并行安装:Yarn 采用并行安装的方式,可以同时下载多个依赖包,而 npm 是串行安装,只能一个一个地下载。这意味着当你使用 Yarn 时,依赖包的安装过程更加高效。

2.本地缓存:Yarn 有一个本地缓存目录,用于存储已经下载过的依赖包。当你需要安装同一个依赖包的不同版本时,Yarn 可以直接从本地缓存中获取,而无需重新下载。这可以节省大量的下载时间。

3.精确的依赖管理:Yarn 会生成一个锁文件 (yarn.lock),用于确保每个开发者在不同环境下都使用相同版本的依赖包。这意味着在安装依赖包时,Yarn 可以更加准确地确定需要使用的版本,减少了版本冲突和不一致性问题。

 

在后来,

有了yarn的压力之后,npm做了一些类似的改进(对手起来了,再不与时俱进要就要被淘汰了)

1. 默认新增了类似yarn.lock的 package-lock.json,同样用于处理依赖包版本一致性的问题
2. git 依赖支持优化:这个特性在需要安装大量内部项目(,或需要使用某些依赖的未发布版本时很有用。

3.npm是有本地缓存的,它保存了已经下载的每个版本的压缩包。本地缓存的内容可以通过-npm cache ls命令进行查看。

本地缓存的设计有助于减少安装时间。

 

那么最终该如何选择呢?

1. 性能需求:如果你对构建速度和依赖包下载速度有较高的需求,可以使用Yarn。Yarn在处理大型项目和并发操作时通常更高效。

2. 生态系统和兼容性:Npm是JavaScript生态系统的默认选择,很多项目都使用Npm作为包管理工具,并且它与其他工具和服务的兼容性较好。

如果你的项目依赖于特定的Npm插件或服务,或者与其他使用Npm的项目进行交互,那么使用Npm可能更方便。

3. 社区支持和文档:Npm和Yarn都有庞大的社区和文档资源,但是Npm在这方面可能更加成熟和全面。

如果你更倾向于使用广泛支持的工具,并且更容易找到相关的教程、示例和问题解答,那么选择Npm可能是一个不错的选择。

4. 团队合作:如果你在一个团队中工作,建议与团队成员协商并讨论选择。考虑到团队中其他开发者的熟悉程度和偏好,可以决定是否使用Npm还是Yarn。

根据你的性能需求、生态系统要求、社区支持和团队合作等因素来衡量,选择适合你项目的工具。

无论是Npm还是Yarn,它们都是广泛使用的可靠工具,并且都能满足大部分项目的需求。

 

最后,yarn的安装方式

 (用你的平台安装我,这何尝不是一种NTR)

 

 

与包管理工具npm和Yarn的区别,我们该如何选择?相似的内容:

包管理工具npm和Yarn的区别,我们该如何选择?

好家伙,学习新工具 1.为什么我们需要包管理器? 关于npm我们已经知道了,这是我们项目的包管理器, 我们现在用的无比顺手的工具,都是在无数的竞争中杀出来的,他们淘汰了无数的产品 首先,倘若我们不使用npm,那么我们应该如何去新建一个前端项目? 纯手工,把我们项目需要的项目一个个下载到我们的项目里面

NPM 实用命令与快捷方式

在 JavaScript 中,无论是新手还是专家都可能在命令行中使用过 NPM。在本篇文章中,我将会整理超实用的 NPM 命令、快捷方式及技巧,帮助 JavaScript 开发人员提高生产力和效率。 在这篇文章中,我们将涵盖以下主题: npm 的定义。 使用 npm 包管理系统管理应用程序依赖项,来

第131篇:如何上传一个npm包

好家伙, NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。 NPM是世界上最大的软件注册表。 1.首先我们去npm官网注册一个账号 (证明你是人....) 2.在本地创建一个新文件夹 最好和你的包同名 3.改

FAQ 关于pip你应该知道的一些技巧

pip简介 pip是安装了python之后的一个应用程序,包管理程序,有点类似于yum、npm、apt等工具 物理位置一般是python.exe所在目录下的scripts下 以我为例,我Python安装在D:\Python39\下,那么pip就在D:\Python39\Scripts 而这个工具所在

超快的 Python 包管理工具「GitHub 热点速览」

天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要。仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例,它的核心竞争力在于「快」和「丝滑替代」。自年初开源以来,不到半年便实现了 Star 数破万的壮

[转帖]Kubernetes-17:Kubernets包管理工具—>Helm介绍与使用

https://www.cnblogs.com/v-fan/p/13949025.html Kubernets包管理工具—>Helm 什么是Helm? 我们都知道,Linux系统各发行版都有自己的包管理工具,比如Centos的YUM,再如Ubuntu的APT。 Kubernetes也有自己的集群包管

Kubernetes(K8S) helm 安装

Helm 是一个 Kubernetes 的包管理工具, 就像 Linux 下的包管理器, 如 yum/apt 等, 可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。 Helm 有 3 个重要概念: helm: 一个命令行客户端工具, 主要用于 Kubernetes 应用

使用 Helm 管理应用的一些 Tips

背景 Helm 是一个 Kubernetes 的包管理工具,有点类似于 Mac 上的 brew,Python 中的 PIP;可以很方便的帮我们直接在 kubernetes 中安装某个应用。 比如我们可以直接使用以下命令方便的在 k8s 集群安装和卸载 MySQL: helm install my-s

Python开发者必读:Pip使用全攻略与最佳实践

> **在这篇文章中,我们将深入探讨Python的主要包管理工具——Pip。内容涵盖了Pip的基本概念、安装和配置、中国国内镜像源的使用、包管理、与虚拟环境的关系、高级用法、问题解决。** ![file](https://img2023.cnblogs.com/other/488581/202307

【转帖】Lua,LuaJIT,Luarocks的安装与配置-史上最详细【Linux】

目录 一,lunux下lua安装 二,安装luarocks lua包管理工具 三,LuaJIT的安装 既然各位都点开看了,那么Lua语言不用我介绍了吧,LuaJIT是lua的一个Just-In-Time也就是运行时编译器,就是存储热点代码直接转化为二进制,JIT是一个概念,Java 底层也有JIT编