包管理器 | 浅谈几个常用的包管理工具

news2024/11/15 18:02:31

目录

🖥️ 前言

◼️ npm

◼️ cnpm

◼️ yarn

◼️ pnpm

◼️ Bower

🖥️ 参考文献 

🖥️ 参考资料


  

🖥️ 前言

如果你是前端开发者,或多或少都会接触到一些包管理工具,包管理工具是用于持续自动化程序的集合,例如安装、升级、配置和删除程序。使用包管理工具可以为前端开发解决很多问题,提高开发效率。

相信很多刚学习包管理工具的同学都说从认识npm开始的,但是其他的包管理工具你都用过哪些,都知道它们的优缺点吗?今天就和大家一起探讨一下!

主流的前端包管理工具有 npm、yarn、pnpm、以及国内的镜像 cnpm、tyarn 等,这是包管理器都是基于 nodejs。

◼️ npm

NPM是Node.js的包管理器工具,是js开发人员共享打包的代码模块,是前端web应用程序等的开放源代码包的公共集合,npm也是命令行客户端开发人员用来安装和发布这些软件包的工具,npm,Inc.是负责托管和维护上述所有内容的公司。

起源:npm 是 2010 年发布的 nodejs 依赖管理工具,在此之前,前端的依赖管理都是手动下载和管理的。

优点:npm是一个成熟、稳定、并且有趣的包管理器。提供了一个非常有用的解决方案,支持大量的测试用例

缺点:

  • 下载速度慢
  • 安装速度慢
  • 下载版本不一致

◼️ cnpm

cnpm 是阿里巴巴推出的包管理工具,安装之后默认会使用 https://registry.npmmirror.com 这个镜像源。cnpm支持所有npm 命令,它的安装命令和 npm 基本一致,通过 cnpm i 或者 cnpm install 命令来安装插件,当然在使用 `cnpm 前必须先通过npm安装。参考:浅谈npm、yarn、cnpm、pnpm

起源:国内使用npm下载太慢了,所以淘宝提供了镜像cnpm访问。

优点:跟npm使用区别不大,npm是国外站点资源,cnpm是国内站点资源,当然国内站点的要快一点。

缺点:npm有packge-lock.json是用来锁定安装的包的版本号,但是cnpm不受packge-lock.json的限制,cnpm只根据packge.json来下载安装包

◼️ yarn

yarn是安装和共享代码的软件包管理工具,也是项目管理工具,无论是小型项目还是大型单体仓库(monorepos),无论是业余爱好者,还是企业用户,Yarn都能满足需求。。它可以通过插件扩展,稳定,有很好的文档记录,免费和开源。yarn 是经过重新设计的崭新的 npm 客户端,它能让开发人员并行处理所有必须的操作,并添加了一些其他改进。运行速度得到了显著的提升,整个安装时间也变得更少。

起源:yarn 是 Facebook 于 2016 年 发布的替代 npm 的包管理工具,还可以作为项目管理工具,定位是快速、可靠、安全的依赖管理工具。

缺点:

  • 存在幽灵依赖。

  • 提升的依赖依然复制多份的问题。

优点:

  • 运行速度获得了显著的提高,整个安装时间也变得更少

  • 像npm一样,yarn使用本地缓存。与npm不一样的是,yarn无需互联网链接就能安装本地缓存的依赖项,它提供了离线模式。这个功能在2012年的npm项目中就被提出来过,但一直没有实现。

  • 容许合并项目中使用到的全部的包的许可证

注意:yarn解决npm在某些方面的缺陷,并改进了速度和安全性等方面。如果你需要一个快速、高效且安全的包管理工具,并且你的项目相对较小,则应该使用yarn。

小结yarn特性


1. 安装速度非常快,因为它可以并行下载和安装依赖包。

2. 支持离线安装,即使没有网络连接也能安装依赖包

3. 内置良好的安全检查功能,可以避免安全风险。

4. 与npm相比,yarn可以更准确地确定依赖关系,从而避免版本冲突问题。

5. 对于少数的一些依赖包,可能会出现兼容性问题。

6. 在某些情况下,与npm不兼容。

◼️ pnpm

pnpm 是一个速度快、磁盘空间大的软件包管理器。pnpm 使用内容可寻址文件系统将所有模块目录中的所有文件存储在磁盘上。使用 npm 或 Yarn 时,如果你有 100 个项目使用 lodash,则磁盘上将有 100 个 lodash 副本。使用 pnpm,lodash 将存储在内容可寻址的存储中。

起源:是 2017 年发布的一款替代 npm 包管理工具,具有速度快、节省磁盘空间的特点。它的大部分功能与npm相同,由于其特殊的工作机制,它可以极大地提高包安装和卸载的速度。

缺点:对老旧存量项目迁移pnpm可能需要踩坑

优点:

  • pnpm运行起来非常的快,超过了npm和yarn
  • pnpm采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一
  • pnpm继承了yarn的所有优点,包括离线模式和确定性安装
  • pnpm 内置了对单个源码仓库中包含多个软件包的支持
  • pnpm 创建的 node_modules 并非扁平结构,因此代码不能对任意软件包进行访问

注:pnpm解决了yarn存在的问题。 如果你需要一个可靠且稳定的包管理工具,并且你的项目是大型的企业级应用程序,则应使用npm或者pnpm

小结:pnpm特性

  • 快速。比替代方案快 2 倍(参见基准测试)
  • 高效。node_modules 内的文件是由一个可寻址的内容存储空间链接的。
  • 非常适合 monorepos。
  • 严格。一个包只能访问其 package.json 中指定的依赖关系。
  • 确定性的。有一个名为 pnpm-lock.yaml 的 lockfile。
  • 在任何地方都适用。支持 Windows、Linux 和 macOS。
  • 久经沙场。自 2016 年以来被各种规模的团队在生产中使用。

◼️ Bower

Bower是一个客户端技术的软件包管理器,基于nodejs的静态资源管理工具。它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源,Bower管理的基本上都是前端工程师使用的东东。它擅长前端的包管理,通过其API展示了包依赖模型。使得项目不存在系统级的依赖,不同的应用程序间也不会共享依赖,整个依赖树是扁平的。

起源: Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系,其主要作用就是:为模块的安装、升级和删除,提供一种统一的、可维护的管理模式。

优点:约束松散,使用简单,可用模块众多

缺点:特点是对包结构没有强制规范,也因此bower本身并没有提供一套构建工具(当前应该能从社区中找到针对bower的构建工具),它充当的基本上是一个静态资源的共享平台。另外,直接在bower上安装模块稳定性难以保证(源的稳定性,以及国内网速的稳定性)。

不过如果是公司级别内部使用的话,结合公司本身的git仓库,并创建一个私有的bower server,并定制一套规范和打包工具,也是可行的。(好吧,这是我之前考虑过的在我厂内部实施的方案)

​bower本身不存储模块文件本身(NPM以及SPM则会将模块作者的文件打包保存在自己的服务器中),也不保存模块的版本信息。模块的发布者通过注册(register)的方式,将模块的可访问的公开的git地址记录在bower的数据库中。而所有的版本都是通过模块发布者自己控制代码库的tag来决定的 。来源:npm,spm,bower 这三个包管理器的比较

更多参考:Web前端开发工具——bower依赖包管理工具 | Bower 网页 Web 开发软件包管理器

🖥️ 参考文献 

[1] npm中文文档 | npm中文网

[2] cnpm - npm 

[3] Home | Yarn - JavaScript 软件包管理器 | Yarn中文文档 - Yarn中文网

[4] pnpm - 速度快、节省磁盘空间的软件包管理器 | pnpm中文文档 | pnpm中文网

🖥️ 参考资料

软件包管理系统知多少 | 包管理工具,代码压缩编译等工具

rpm/yum/npm包管理器区别以及常用命令 | 常用软件包rpm/yum/npm区别

yum和apt-get包管理工具 | yum包管理工具详解 | 扒扒包管理器:Bower、Browserify、Duo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17.OpenCV中的GFTTDetector类

文章目录 GFTTDetector功能OpenCV中GFTTDetector类reference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 这是使用imgproc.hpp中的goodFeaturesToTrack函数封装的类,其使用和goodFeaturesToTrack函数基本相似。 GFTTDetec…

wps如何加载mathtype和Endnote

为了支持国产化软件,弃用office套装,现在改用wps办公软件,但是写作科技论文的时候还是会出现很多的不方便,比如文献引用、公式排版编号等等。尽管wps自带了公式编辑器,然鹅这可太不方便了,因此把几个技巧总…

由于找不到libmmd.dll,无法继续执行代码有什么好的解决办法修复?

其实要解决由于找不到libmmd.dll,无法继续执行代码这个问题还是比较简单的,因为这类问题不外乎就是丢失了dll文件,我们只要下载安装回来就可以了,但有朋友还是会好奇,libmmd.dll到底是什么文件,那我们就来详细说说吧&a…

paddlenlp安装教程

一、安装cuda和cuDNN 1、安装paddlepaddle之前,要确保电脑已经安装了对应版本的cuda和cuDNN (1)安装CUDA 进入官网选择合适版本下载: 按照步骤安装完成即可。安装完成后进行验证,打开cmd命令窗口,输入nv…

Floyd算法学习笔记

Floyd算法学习笔记 前言 同步于 c n b l o g s cnblogs cnblogs 发布 如有错误,欢迎各位 dalao 批评指出。 前置芝士: 1.邻接矩阵(Floyd要用邻接矩阵存图) 2.动态规划思想(最好学过,没学过也没有太大影响&#…

无线视频传输方案|远距离无人机图传应用,+28dBm大功率wifi图传模块

针对无人机远程图片、视频传输需求,市面上就有无线模块研发厂家推出了基于大功率图传WiFi模块SKW77的无人机远程视频传输解决方案。在无人机和地面的中继器内加入串口WiFi模块,手机通过与无人机和地面的中继器内置的串口WiFi模块给无人机传递控制信号&am…

深度理解 JAVA 动态代理

本文篇幅比较长,在确定您是否需要仔细阅读本文前,可以先思考一下下面几个问题: 动态代理是什么?如何实现动态代理?所有类都能实现动态代理吗?非目标方法是否会被代理?为什么 JDK 实现动态代理必…

平安养老险广东分公司积极开展“7·8全国保险公众宣传日”系列活动

2023年是全面贯彻落实党的二十大精神的开局之年,是实施“十四五”规划承上启下的关键之年。在国家金融监督管理总局指导、中国保险行业协会组织下,平安养老保险股份有限公司广东分公司(以下简称“平安养老险广东分公司”)以“78全…

ETHERNET/IP转MODBUS-RTU协议网关

远创智控YC-EIP-RTU是自主研发的一款ETHERNET/IP从站功能的通讯网关。该产品主要功能是将各种MODBUS-RTU设备接入到ETHERNET/IP网络中。 远创智控YC-EIP-RTU连接到ETHERNET/IP总线中做为从站使用,连接到MODBUS-RTU总线中做为主站或从站使用。 2.ETHERNET/IP转MODBU…

IDEA中配置Java反编译工具javap -c

IDEA中配置Java反编译工具javap -c 一、前置条件二、新建外部工具三、使用方式 欢迎访问我的个人博客:https://wk-blog.vip 一、前置条件 确保 IDEA 已经开启了编译 javac 。默认 IDEA 是开启的。 二、新建外部工具 首先进入 Settings ---> Tools ---> Ext…

自动化测试报告样式HTMLTestRunner、BeautifulReport、HTMLReport、Allure你喜欢哪个?

自动化测试报告样式HTMLTestRunner、BeautifulReport、HTMLReport、Allure你喜欢哪个? 1 框架设计(准备工作)1.1 简易框架图1.2 common/reportOut.py1.3 report1.4 testcase/test_baidu.py1.5 mian.py 2 HTMLTestRunner2.1 下载使用2.2 reportOut.py设计2.3 报告样式…

十一、框架与大数据模型

frameset标签 1、frameset标签 这种结构&#xff0c;基本上被淘汰 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <frameset cols"25%,75%">&…

统计每列中不同值出现的次数.apply(pd.value_counts)

在Python 的pandas.DataFrame中有一种操作&#xff0c;它可以大大减轻我们的工作量&#xff0c;方便我们更快地进行数据分析&#xff0c;加快处理工作的效率。这就是 .apply(pd.value_counts) pandas 的强大&#xff0c;越使用&#xff0c;也就越爱了。现在就来夸夸它的作用啦…

统计学习导论(ISLR) 第八章树模型课后习题

统计学习导论(ISLR) 第八章树模型课后习题 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言…

二叉树 — 返回最大的二叉搜索子树大小

题目&#xff1a; 给定一棵二叉树的head节点&#xff0c;返回这颗二叉树中最大的二叉搜索子树的大小。 一颗二叉树来讲&#xff0c;可能整棵树不是搜索二叉树&#xff0c;但子树是一颗搜索二叉树。如下图所示&#xff0c;这时要返回这颗子搜索二叉树的最大节点个数。下图中&…

【node报错】cannot be loaded because running scripts is disabled on this system.

了解意思&#xff1a; cannot be loaded because running scripts is disabled on this system. 因为在该系统上禁用了运行脚本&#xff1b; 这个错误是由于你的系统执行策略&#xff08;Execution Policies&#xff09;禁止运行脚本导致的。Windows 系统默认情况下禁止运行…

ChatGPT前身GPT的论文-译文

写在前面 论文 Improving Language Understanding by Generative Pre-Training 地址 https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf ChatGPT火了&#xff0c;改论文作为ChatGPT的前身&#xff0c;可以从这里看到ChatGPT的原始影子。 摘要 自然语言…

制造业怎么应用大数据?_光点科技

随着信息技术的迅猛发展&#xff0c;大数据正逐渐成为各行各业的重要资源和工具。在制造业中&#xff0c;大数据的应用也逐渐得到了广泛关注。 制造业如何应用大数据&#xff1f; 首先&#xff0c;数据采集是制造业应用大数据的重要一环。制造业的生产过程中涉及到大量的数据&a…

二叉树OJ题:LeetCode--101.对称二叉树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中第144道二叉树OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人…

49天精通Java,第0天,编程语言类型有哪些?我心中的TOP1编程语言,什么是java跨平台性?

目录 一、常见的编程语言类型1、机器语言2、汇编语言3、高级语言 二、计算机编程语言三、跨平台性1、跨平台的优势包括&#xff1a;2、实现跨平台的方式包括&#xff1a; 四、Java的跨平台性五、java运行时和虚拟机六、Java内存管理和Java垃圾回收1、Java内存管理2、Java垃圾回…