详解:npm升级到pnpm对比优化点!!

npm@3之前

  • 依赖树层级过深,导致依赖路径过长
  • 并且相同依赖模块会被重复安装,占用电脑磁盘空间

npm@3之后


修改为扁平化处理

  • 算法复杂
  • 存在多项目间依赖相同副本的情况
  • 导致没有明确被依赖的包也可以直接引用,管理复杂

pnpm


node_modules改成非扁平化结构,并且改为使用硬链+软链的形式

软链接 :创建的快捷方式,其实保存的只是一个地址
硬链接:磁盘具体的引用路径

  • 所有的文件被实际安装在.pnpm-store文件夹下面(使用 pnpm store path 查看),node_modules下面依赖会最终通过硬链接的形式链接到该文件夹,保证了不同项目间共享相同依赖版本的使用,减少依赖包副本
  • node_modules下面的直属依赖都是软链接的形式,链接到.pnpm文件下面的指定依赖
  • 在.pnpm对应直属依赖的node_modules中,分为两种链接。其中直属依赖本身使用的是硬链接链接到.pnpm-store文件夹里面;而剩余的其他依赖包是使用软链接 链接到.pnpm文件下面的指定依赖。所以!!!!只有找到依赖自身,才会通过硬链接找到磁盘中的位置,这样可以保证同一个项目里不同依赖也不会重复安装,同时不同项目之间的相同依赖也无需在磁盘中存储多份

例如:根目录下 axios 软链接到 .pnpm 目录下的 axios 文件夹中,展开 .pnpm/axios@16.1 的node_modules 文件夹,其中有 axios 所需的依赖,包含 axios、follow-redirects、form-data、proxy-from-env,其中 axios硬链接到磁盘中(即与 pnpm 仓库保存的地址一致),其它文件软链接到 .pnpm 的自身位置。

  • 优点1: 对于非明确依赖的包做隔离
  • 优点2: 不同项目的相同依赖只存在一个副本,避免了重复依赖重复安装,节约磁盘空间
  • 优点3: 同一依赖包的不同版本,那么只有版本之前不用的文件被存储起来
  • 优点4: 避免了循环引用和层级过深的问题(都在.pnpm-store文件夹的第一层)
相关推荐
认真学GIS4 分钟前
日尺度地下水水位!全国11897个地下水动态监测站点2005-2021年日尺度地下水水位(地下水埋深)(EXCEL格式)数据
服务器·前端·excel
_DoubleL4 分钟前
Volta启动项目自动切换Node版本
前端·node.js
阿里巴巴终端技术12 分钟前
[第 20 届 D2 倒计时] 7 大专场演讲、44 个精彩话题、D2 之夜畅聊 AI + 终端的发展前景
前端·人工智能·程序员
进击的雷神16 分钟前
前端路由动态渲染、JSON内嵌HTML清洗、展位信息数组化、分页参数固定化——尼日利亚展会爬虫四大技术难关攻克纪实
前端·爬虫·python·json
文心快码BaiduComate23 分钟前
Comate 4.0的自我进化:后端“0帧起手”写前端、自己修自己!
前端·后端·架构
cipher23 分钟前
Web3全栈学习与实战项目
前端·后端·区块链
冴羽25 分钟前
资深前端都在用的 9 个调试偏方
前端·javascript
左夕39 分钟前
深入理解Vue中的插槽:概念、原理与应用
前端·vue.js
我叫蒙奇40 分钟前
flex: 1 vs flex: auto 最通俗的解释
前端
兆子龙41 分钟前
万字解析 OpenClaw 源码架构:从入门到精通
前端·javascript