微前端
PBitW
编辑于 2026年02月26日 14:17

认识微前端

前言:微前端已经是一个非常成熟的领域了,但开发者不管采用哪个现有方案,在适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等用户核心诉求都或存在问题、或无法提供支持

注:

微前端都有优缺点,需要按需求去选择,这里选无界,是因为大部分不支持vite

小满笔记:

https://juejin.cn/post/7212603829572911159

1、微前端概念

微前端是借鉴了微服务的理念,将一个庞大的应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发,独立运行,独立部署,还可以随意组合,这样就降低了耦合度,从而更加灵活。

2、微前端特性

3、微前端方案

a、iframe

b、qiankun --》使用比较复杂 --》 自己写对vite的插件

c、micro-app --》京东开发 --》对vite支持更拉跨

注:

适配 vite 需要写很多代码,有些还要改,而且会失去很多功能!

d、EMP 方案--》必须使用 webpack5 --》很多人感觉不是微前端 --》 去中心化方式去共享模块,更像拆包

09:04

e、无界

p2 微前端前置知识 --》 webcomponents

渲染后

产生样式隔离

传参

接参

生命周期

p3 pnpm

1、安装pnpm

npm i pnpm -g

2、pnpm 较于npm优势 --》不会幽灵依赖+占用更小空间

前置知识-pnpm 底层原理 + monorepo架构 P3 - 00:55

3、pnpm使用到的技术:

a、硬链接+软连接

a.1、硬链接创建

注:

硬链接共享同一个内存地址

a.2、创建软链接 --》上图的符号链接

注:

软链接类似快捷方式

b、仓库 --》 全电脑的依赖都在这里,只有一份 --》 但是在C盘

幽灵依赖,参考渡一:网页链接​

4、pnpm 的 monorepo架构

我们采用的是微前端一个主应用,和多个子应用,我们肯定不会一个一个去install安装依赖,采用monorepo 架构 一次install 即可安装完成

a、构建主应用(非无界)

b、放入子应用

c、到根目录, pnpm init,创建 pnpm-workspace.yaml 文件

d、复制这段代码

执行 pnpm i

注:

I、main表示主应用要下载依赖;web/**表示web下的所有子应用都要下载依赖,更多配置见:https://www.pnpm.cn/pnpm-workspace_yaml

II、monorepo 会把公共的提出来

前置知识-pnpm 底层原理 + monorepo架构 P3 - 15:56

III、vue源码使用了monorepo架构参考vue3源码解读:

https://wjchumble.github.io/explain-vue3/chapter1/#monorepo

5、monorepo架构特性

前置知识-pnpm 底层原理 + monorepo架构 P3 - 17:10

I、通过--filter(-F)去过滤执行哪一个文件中的命令!

II、子模块复用技术

pnpm -F main add common,就可以把复用的加到对应的文件中的package.json

p4 无界基础

1、在主应用安装无界

pnpm i wujie

2、主应用 main.js 引入 wujie

但是作者进行了封装,所以不用上述这样引入,变成了组件 wujie-vue3

安装

pnpm i wujie-vue3

引入

3、启动子应用,要开三个终端,分别起(也可以用 monorepo架构

4、主应用使用

p5 自己封装 wujie-vue3 + webpack + swc + 发布npm

1、手写 wujie-vue3 --》 将无界封装成组件

2、写完后,使用webpack打包

二次封装无界 + webpack + swc + 发布npm P5 - 15:59

打包后的文件代码很多,因为把vue、无界都打包进去了

配置 打包不打包vue、无界

打包后发现没有转换成低阶语法

3、swc 代替 ts-loader+bable-loader,且构建速度很快 【迁移成本低】--》基于rust

安装依赖

webpack配置

就是把ts-loader换成了swc-loader!

此时打包完的还不能使用,需要配置webpack

注:

这个只有开发库的时候用到,让打包后的东西支持前端的引入规范用的

还是少了esmodule的兼容,使用swc

安装

新建配置文件 .swcrc

复制地址:https://swc.nodejs.cn/docs/configuration/swcrc

配置命令

ts报错:

二次封装无界 + webpack + swc + 发布npm P5 - 26:05

4、发布 npm

在package.json中添加一些配置

发包流程

p6 预加载

1、preloadApp实例 --》加上就可以预加载

源码

无界-预加载 + 底层原理 + 浏览器FPS帧率 P6 - 01:32

2、源码中重要的部分 requestIdleCallback

requestidlecallback 理解参考渡一:

网页链接​

浏览器的空闲时间 --》 requestidlecallback 的参数的 timeRemaining > 0 就表示还有多少时间去执行任务

a、60fps举例 --》这种情况一般没有多少时间留给 requestidlecallback 了

1000 / 60 = 16.6ms 之内完成输入渲染合成,空闲的时间才会留给 requestidlecallback

一帧做了什么事?

b、第二种情况是没有任务执行浏览器会有50ms空闲时间,这个时间段也会执行 requestidlecallback

c、和 react 中的 fiber 关系

因为react也有该机制 但是react并没有用 requestidlecallback,说是这个东西经过测试可能会超过16ms,超过16ms绘制就会看起来很卡 所以react16是用的 requestAnimationFrame + postMessage 实现的那为什么不用setTimeOut setTimeOut 及时为0 也会有一个最小毫秒延迟4ms,所以是用了postMessage。

react18又换成了MessageChannel 实现了队列方式去执行任务。

react 18 实现简单讲解

无界-预加载 + 底层原理 + 浏览器FPS帧率 P6 - 12:11

p7 跨应用传参

1、iframe

2、props

注意:

子应用是不用安装无界的!

3、event bus --》 无界的

p8 模块联邦技术