Npm/yarn/cnpm/pnpm前端包管理器发展

时间:2024-10-04 18:22:51

npm/yarn/cnpm/pnpm前端包管理器发展

前端领域在node的出现下,具有了非运行时,管理代码软件包的能力,使项目在多人开发之间具有了工程化和复用工具库的能力。
node配套的包管理工具为npm,依赖管理主要在package.json文件中描述,依赖包安装在node_modules项目目录下。不同的项目依然如此,除了个别全局包外,这种安装方式非常占用空间及I/O消耗,会有大量的文件被从npm包缓存中拷贝在不同的项目目录中;

npm

npm从发展过程中经历了如下阶段;
第一阶段,npm2 所有的包安装以树形结构放在node_modules目录下,以安装包为目录独立显示,安装包本身所依赖在其目录下的node_modules下,缺点是层级无限下延不兼容win,引用效率低下,检索速度有影响,优点是项目依赖在目录下清晰;
在这里插入图片描述

第二阶段,npm3 所有的包安装平铺在node_modules目录下,包之间相互引用,也大大加快了系统检索速度,优点是层级不深,加载速度快,缺点是目录看着混乱,安装慢需要计算依赖关系用于平铺;

在这里插入图片描述

以上问题只是明显的变化,实际上npm包还有很多不足
1.下载远程包速度慢,以串行为主;
2.缓存利用不佳,不支持离线缓存;
3.需要分析依赖平铺,安装时间较长;
4.需要从缓存处拷贝到项目目录;
4.因依赖版本向后兼容的写法可能引起不同环境安装版本差异等,无法确定性安装;

因此出现了yarn/cnpm/pnpm等包管理器用来代替改善包管理器;

cnpm

cnpm跟npm一样,只是从镜像源由国外换到了国内,用以提高下载速度;

yarn

yarn改进了安装方式效率大大提高,解决了以下几点;
1.安装方式改串行为并行;
2.一次安装到缓存位置,且支持离线缓存优先拷贝;
文件确定性安装;
特性(Plug’n’Play)

后续又引用Plug’n’Play特性消除了node_modules文件夹的存在,避免了从缓存拷贝到项目目录的I/O操作,大大提高了安装速度,充分利用缓存,节约空间和避免臃肿的node_modules;缺点是查看源码需要到全局处查看,以源码来引用调试需要额外使用命令,需要改变使用习惯,使用该特性必须要用yarn运行;
在这里插入图片描述

pnpm

pnpm继承了yarn的优点继续加强了硬链接和符号链接来加快安装和避免node_modules的存在,各方面均超过了npm和yarn,但不够流行;
默认安装结构为早期的npm;
在这里插入图片描述

在其他包管理器继承优化的步骤中npm也在不停的吸收改进,目前也变得并不差,但从创新和改善层面来说总是慢人一步,npm本身也改进了缓存方式和确定性安装等;

参考链接:
/npm/npm
/yarnpkg/yarn
/pnpm/pnpm
/weixin_33738578/article/details/91412163