dljia
  • 前言
  • es6
    • promise
    • 箭头函数
  • http相关
    • ajax请求中contentType和dataType
    • async和defer的区别
    • cookie、session和token
    • http协议介绍
    • http缓存
    • 转发和重定向
  • js
    • 1-js深浅复制
    • 10-节流防抖
    • 11-Promise常见手写
    • 2-js函数值传递
    • 3-js原型链详解
    • 4-js基础讲解this篇
    • 5-call、apply和bind
    • 6-js中的继承
    • 7-闭包与立即执行函数
    • 8-js事件循环
    • 9-js模块化
  • react
    • React-diff
    • React-fiber
    • React组件设计规则
    • mvc与mvvm
    • react-router
    • react懒加载
    • redux
    • setState源码分析
    • webpack+react从0项目构建
  • ts
    • Typescript编程书籍导读
    • 体操基础
  • 其他
    • gitbook简易配置教程
    • gitbook转pdf电子书
  • 微前端
    • pnpm
    • qiankun
    • single-spa源码分析
    • 几种微前端架构的选型
  • 转载
    • interview-1
    • interview-2
    • interview-3
    • 经验好文
  • 项目经验
    • 23年总结
    • [Arkts 学习笔记](项目经验/Arkts 学习笔记.md)
    • Grafana插件
    • JSDoc
    • electron-builder构建的安装包,安装时通过nsis脚本自动导入注册表
    • overflow-yautohiddenscroll和overflow-xvisible组合渲染异常
    • webpack
    • 前端工程化
    • 前端性能优化思路
    • 前端性能监控工具
    • 前端架构
    • 前端登录流程
    • 前端监控原理
    • 团队管理
    • 基于node实现简单server
    • 如何对业务进行深挖
    • 如何拉齐横向
    • 如何画图
    • 如何记录
    • 组件库
Powered by GitBook
On this page
  • pnpm 解决了哪些问题
  • 解决那些问题:
  • 前置理解
  • 原理解析:
  • 其他
  • 参考

Was this helpful?

  1. 微前端

pnpm

pnpm 解决了哪些问题

解决那些问题:

  1. 节省安装时间、磁盘空间

  2. 没有幽灵依赖、重复依赖问题

  3. 更好的monorep 支持

前置理解

  1. hard link: 硬链接,在文件系统中,硬链接就是一个指向原文件的入口。可以理解为多个名字指向同一个文件。在不同地址下更改这个文件内容,会同时影响到所有硬链接的文件。

  2. soft link: 软链接,可以理解为一个单向指针,类似于windows的快捷方式

  3. 幽灵依赖: npm3后 包安装时会提取公共包置顶,如果项目依赖了这个包但package.json中没有 那么仍可以使用

  4. 不确定依赖; 如果a依赖b@v1.0 c依赖b@v2.0 那么npm置顶行为不确定,存在幽灵依赖时会有问题

  5. 依赖分身 或者叫重复依赖: 如果a包依赖b@V1.0 c包依赖b@v1.0 那么npm会同时下载两个b@v1.0

原理解析:

pnpm安装包时,pnpm会在全局的store目录里存储项目的依赖。所以安装速度更快,比如npm 他应该还要去算一下这个包的依赖树,然后再去下载。pnpm则完全不需要

pnpm 生成的目录为非扁平化的目录,而是根据真实目录去存储对应的软链。 就是将 node_modules 里的文件软链接到对应的 .pnpm/[package_name]@version/node_modules/[package_name] 中,而这个地址实际上是个硬链,链到全局的store当中。 这样做主要是为了两点,1 解决幽灵依赖和依赖分身的问题,因为nodemodule下只有package.json直接依赖的包,2. 满足node的寻址逻辑,如果直接是个硬链,硬链接地址是xxx@version

其他

  1. pnpm 第一次安装时会自动算npm.lock 和 yarn.lock无需担心依赖问题

参考

Previous微前端Nextqiankun

Last updated 1 year ago

Was this helpful?

如果存在peer依赖时,可能存在多个相同版本的包 由于peer依赖版本不同,而被安装两次 比如a包peer依赖b@v>1.0 那么一个monorepo下的仓库 一个里面b 是2.0 一个里面是1.0 那么a包会被安装两次 解决办法就是monorepo下尽可能的去统一版本,比如常见的UI库(需要再相同环境下) react等。提测升级做统一提测升级

参考
转载于此
参考2
参考3
pnpm 在monorepo上的一些应用操作