Package detail

wujie

Tencent10.6kMIT1.0.29

极致的微前端框架

readme

logo

wujie(无界)

无界微前端是一款基于 Web Components + iframe 微前端框架,具备成本低、速度快、原生隔离、功能强等一系列优点。

文档

动机:动机

文档详见:文档

演示详见:demo

背景

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

Web Components 是一个浏览器原生支持的组件封装技术,可以有效隔离元素之间的样式,iframe 可以给子应用提供一个原生隔离的运行环境,相比自行构造的沙箱 iframe 提供了独立的 window、document、history、location,可以更好的和外部解耦。无界微前端采用 webcomponent + iframe 的沙箱模式,在实现原生隔离的前提下比较完善的解决了上述问题。

特性

  1. 成本低
    • 主应用使用成本低
    • 子应用适配成本低
  2. 速度快
    • 子应用首屏打开速度快
    • 子应用运行速度快
  3. 原生隔离
    • css 样式通过 Web Components 可以做到严格的原生隔离
    • js 运行在 iframe 中做到严格的原生隔离
  4. 功能强大
    • 支持子应用保活
    • 支持子应用嵌套
    • 支持多应用激活
    • 支持应用共享
    • 支持去中心化通信
    • 支持生命周期钩子
    • 支持插件系统
    • 支持 vite 框架

快速上手

直接使用

  • 安装
npm install wujie -S
  • 使用
import { startApp } from "wujie";

startApp({ name: "唯一id", url: "子应用路径", el: "容器", sync: true });

vue 框架

  • 安装
# vue2 框架
npm i wujie-vue2 -S
# vue3 框架
npm i wujie-vue3 -S
  • 引入
// vue2
import WujieVue from "wujie-vue2";
Vue.use(WujieVue);
// vue3
import WujieVue from "wujie-vue3";
app.use(WujieVue);
  • 使用

<WujieVue
  width="100%"
  height="100%"
  name="xxx"
  :url="xxx"
  :sync="true"
  :fetch="fetch"
  :props="props"
  :beforeLoad="beforeLoad"
  :beforeMount="beforeMount"
  :afterMount="afterMount"
  :beforeUnmount="beforeUnmount"
  :afterUnmount="afterUnmount"
></WujieVue>

react 框架

  • 安装
npm i wujie-react -S
  • 引入
import WujieReact from "wujie-react";
  • 使用
<WujieReact
  width="100%"
  height="100%"
  name="xxx"
  url="{xxx}"
  sync="{true}"
  fetch="{fetch}"
  props="{props}"
  beforeLoad="{beforeLoad}"
  beforeMount="{beforeMount}"
  afterMount="{afterMount}"
  beforeUnmount="{beforeUnmount}"
  afterUnmount="{afterUnmount}"
></WujieReact>

常见问题

详见文档

本地开发

运行以下脚本,可以本地开发无界微前端框架,支持实时编译调试开发。

nvm use v14.20.0         // 切换node版本到14版本,因为有些demo的node版本比较低
pnpm i                  // 安装包依赖,务必使用pnpm
npm run start           // 启动所有应用

One more thing

无界微前端解决方案来源于团队的无极低代码平台。无极是专注于高效实现企业B端应用、专业的一站式低代码解决方案,是腾讯内部应用最广泛的低代码平台,360度覆盖全企业应用场景。通过无界微前端,存量页面和低代码页面可以丝滑的互相内嵌,闭环新老系统的连接。欢迎体验【腾讯无极低代码】,感受智能而高效的研发模式!

changelog

Change Log

All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.

1.0.29 (2025-07-20)

Features

  • 子应用提供自定义事件配置 (4f4f974)

1.0.28 (2025-04-08)

Bug Fixes

  • 修复style元素的insertAdjacentElement新style没有做patch的问题(#434) (aea54b9)
  • 修复url解码导致的问题(#975) (89e4eb3)

Features

  • react,vue组件支持设置包围的div组件style (#971) (c26dd41)

1.0.27 (2025-04-08)

Bug Fixes

  • 修复子应用快速切换可能导致渲染undefined (#976) (59bdf1c)
  • 修复unmount异步后导致的问题(#823) (cab2a21)
  • iframe循环等待添加deadline(#975) (2c713de)

1.0.26 (2025-03-23)

Bug Fixes

  • 修复应用子应用嵌套路由查询参数丢失 (73ba0c6)
  • 修复重复引用wujie导致上下文丢失的问题(#955) (86bd166)

Features

1.0.25 (2025-02-19)

Bug Fixes

  • 修复在 sandbox.document.getElementById 无法查询到时, 使用 iframe 调用回到 proxy 导致死循环 (#946) (0dfad42)
  • 绑定沙箱的destroy函数的this指针(#958) (1b516de), closes #954

1.0.23 (2024-11-24)

Bug Fixes

  • appWindowOnEvent 增加 onerror and onunhandledrejection 事件 (#865) (76ee1b2)
  • 修复 子应用 html 上的属性会被丢失的问题(#908) (#909) (e2cf327)
  • 修复css中图片url解析错误 (#681) (94c3b6e)
  • 修复wujie-react重复渲染时保活模式输出undefined (#840) (6c4659d)
  • 修复在降级情况下无法加载vite使用vite-legacy-plugin打包出的js文件 (#861) (a22b545)
  • 修复多个子应用启动,拿到的全局对象缓存都是第一个子应用全局对象的bug (#792) (41a5309)
  • 修复子应用无法使用 WebComponent 组件库,提示 adoptedstylesheets 问题 (#771) (fa5fb03)
  • 修复子应用无法使用 WebComponent 组件库,提示 adoptedstylesheets 问题 (#771) (#853) (f0c12e7)
  • 修复通过appendChild添加的外部脚本中使用document.body.removeChild移除脚本报错阻塞代码执行的问题 (#839) (2e2a23c)
  • 在afterUnmount的回调函数中,使用 destroyApp 方法时,bus 属性为null ,调用$clear()会报错 (#742) (d6ea8d6)

Features

  • add AI search (#760) (4296ed2)
  • unmount hook support promise (#645) (18be78b)
  • 优化处理document专属事件中可能造成内存泄露部分 (#644) (78e6983)
  • 添加postmessage通信示例 (da2c99f)

1.0.22 (2023-12-18)

Bug Fixes

  • 解决子应用销毁时,主应用监听事件内存未被释放 #752 (#753) (5fa87a8), closes #568
  • 修复降级模式会丢失事件监听器 (#758) (534e865)
  • 修复在safari下scriptElement的src下不可写的问题 (84b2378)
  • 修复重复Object.defineProperties导致的报错 (94bbfa6)

1.0.21 (2023-12-18)

Bug Fixes

  • 解决子应用销毁时,主应用监听事件内存未被释放 #752 (#753) (5fa87a8), closes #568
  • 修复降级模式会丢失事件监听器 (#758) (534e865)
  • 修复在safari下scriptElement的src下不可写的问题 (84b2378)
  • 修复重复Object.defineProperties导致的报错 (94bbfa6)

1.0.20 (2023-11-08)

Bug Fixes

  • 兼容部分浏览器script src不可配置 (3eab5cf), closes #648
  • appendChildOrInsertBefore effect ignore css error (#643) (17179fb)
  • proxy: protect the program when getElementById throws an exception error (#693) (37dc95b)
  • wujie-react watch props change, restart app (#689) (1b39612)

Note: Version bump only for package wujie-project

1.0.18 (2023-07-11)

Bug Fixes

  • 兼容子应用定义不可修改的全局函数 (#574) (79c4ee0)
  • 修复wujie-react偶现无法加载子应用元素 (#599) (f927505)
  • 修复wujie子应用无法监听error事件 (#616) (2f9b65c)
  • 修改wujie子应用无监听unhandledrejection问题 (#617) (9f53471)
  • documentProxyProperties: add caretPositionFromPoint to document`s proxy methods (#595) (8e1b446)
  • iframe: 修复 handler 为 undefined 时执行 addEventListener 错误 (#514) (30bf8c1)

Features

1.0.17 (2023-05-30)

Bug Fixes

  • 子应用window事件监听增加message事件,增加事件监听target可选参数 (#555) (2255301), closes #549

1.0.16 (2023-05-17)

Bug Fixes

  • proxy: protect the program when querySelectorAll throws an exception (#547) (a7f83fc)

1.0.15 (2023-05-04)

Features

1.0.14 (2023-03-31)

Bug Fixes

  • 修复获取html入口文件时,因为接口异常不能正常触发loadError生命周期 (#481) (1b45d30)
  • 修复子应用嵌套页面空白问题 (#492) (ff9714f), closes #487 #485
  • iframe: 修复 handler 为 undefined 时添加到 handlerCallbackMap 报错 (#483) (9b5a7fb)
  • iframe: 修复多层嵌套找不到渲染节点问题 (#491) (6f54797)

1.0.13 (2023-03-29)

Bug Fixes

  • 修复降级后页面无法渲染的问题 (1883f59)
  • 运行主应用代码主动报错 (#482) (8981b7b)

1.0.12 (2023-03-28)

Bug Fixes

  • 修复属性获取问题导致代码运行报错 (09419fd)

1.0.11 (2023-03-24)

Bug Fixes

1.0.10 (2023-03-23)

Bug Fixes

1.0.9 (2023-03-23)

Bug Fixes

Features

1.0.8 (2023-03-14)

Bug Fixes

Bug Fixes

Features

1.0.6 (2023-02-08)

Bug Fixes

  • 修复预加载js资源没有下载 (#363) (e41c217)
  • chore: 修复 Vue.use(WujieVue) 时类型错误 (#382) (f293697)

1.0.5 (2023-01-10)

Features

1.0.4 (2022-12-30)

Bug Fixes

1.0.3 (2022-12-12)

Bug Fixes

  • 修复保活模式下路由参数丢失的问题 (#323) (ffd2d60)
  • 修复降级场景下文档非标准模式问题 (#312) (d21365a), closes #302

1.0.2 (2022-12-06)

Bug Fixes

Features

  • 添加子应用可以直接读取html的能力 (#307) (f45e57e)

1.0.1 (2022-11-25)

Bug Fixes

  • 兼容主应用拦截原生的createElement (#275) (9d657ee), closes #274
  • 修正其他document调用获取元素函数无法获取的问题 (#263) (9c7cccd), closes #262

Features

  • 增加degradeAttrs参数用于控制降级时的Iframe属性 (#272) (16adfd4), closes #271

1.0.0 (2022-11-10)

Features

1.0.0-rc.25 (2022-11-01)

Bug Fixes

  • 修复无界主应用内嵌在iframe内部报错 (#246) (56ff61e)

1.0.0-rc.24 (2022-10-20)

Bug Fixes

  • 修复内嵌场景下createElement重复覆盖的问题 (#232) (6a39043)

1.0.0-rc.23 (2022-10-14)

Features

  • 钩子appendOrInsertElementHook添加原生元素参数 (#220) (7873911)

1.0.0-rc.22 (2022-10-13)

Features

  • 插件添加appendOrInsertElementHook钩子 (#217) (fbffe68)

1.0.0-rc.21 (2022-10-10)

Bug Fixes

  • 修复esm和jsIgnores脚本的onload事件没有触发 (#211) (7846853), closes #210

1.0.0-rc.20 (2022-09-30)

Bug Fixes

  • 修复异步JavaScript文件加载异常 (#188) (928bb32), closes #184
  • 修复子应用location.origin为主应用地址问题 (#194) (ed5c518), closes #193
  • 修复cacheOptions类型不正确的问题 (#191) (2051e01), closes #179
  • 依赖使用 pnpm workspace 协议 (#186) (ef34944)

1.0.0-rc.19 (2022-09-23)

Bug Fixes

  • 修复async脚本导致脚本执行顺序错乱问题 (#173) (60a3e0c)
  • 修复defer脚本无法关闭fiber模式 (#166) (ef58f48)
  • 修复destroy没有清除子应用dom的问题 (#175) (3180d16), closes #170
  • 修复js文件下载失败会导致子应用运行失败 (#174) (7575de4), closes #172

1.0.0-rc.18 (2022-09-22)

Bug Fixes

  • 修复子应用切换插件样式重复问题 (#163) (bf0fb18), closes #161
  • 修复子应用切换模板样式重复问题 (#164) (80e1b4b)

Features

  • 去除removeEventListener无回调函数告警 (149e8e9)

1.0.0-rc.17 (2022-09-20)

Bug Fixes

  • 解决 data 与 methods 存在相同属性导致 vue 警告 (#147) (bf37422)
  • 修复preload 没有使用自定义fetch (#160) (136a41c)
  • 修复react hash 模式下异常 (#155) (085687c), closes #151

Features

1.0.0-rc.16 (2022-09-12)

Bug Fixes

1.0.0-rc.15 (2022-09-09)

Bug Fixes

1.0.0-rc.14 (2022-09-06)

Bug Fixes

  • 修复使用twind切换应用样式丢失的问题 (#131) (71d81b7), closes #116
  • 修复svg在append到元素之后ownerdocument失效问题 (#132) (be205d2)

1.0.0-rc.13 (2022-09-02)

Bug Fixes

  • 修复空连接或者hash链接也被转换成绝对地址 (#113) (3d4232d), closes #107
  • 修复window被proxy导致作用域错误 (#106) (4895297), closes #102
  • plugin: fix cssLoader to exclude a data URL (#103) (61546fb)

Features

1.0.0-rc.12 (2022-08-25)

Bug Fixes

  • 修复集成测试失败 (#86) (38fc786)
  • 修复子应用加载页面生命周期无法触发 (#85) (ea8efcb)
  • wujie-core package has eslint error (#81) (f169411)

Features

  • 添加jsIgnores和cssIgnores两个插件 (#95) (7631e7c)
  • 修复style标签被重复代理的情况 (#80) (1769506)

1.0.0-rc.11 (2022-08-17)

Features

  • 子应用判断window.window为window (#69) (66c528b)

1.0.0-rc.10 (2022-08-16)

Features

1.0.0-rc.9 (2022-08-15)

Bug Fixes

  • 修复子应用window.window指向问题 (#57) (1938892)

Features

  • 添加createApp全局配置缓存 (#64) (dd3d687)

1.0.0-rc.8 (2022-08-11)

Bug Fixes

  • 修复head和body被应用缓存的问题 (#50) (0959ce4)

1.0.0-rc.7 (2022-08-08)

Bug Fixes

  • 修复子应用字体无法加载的问题 (#33) (a33dec5)
  • 修复url解析错误问题 (#37) (027c442)

Features

  • 将子应用样式中相对地址默认转换成绝对地址 (#35) (a74f236)
  • jsExcludes 和 cssExcludes 支持正则 (#21) (8c902a4)

1.0.0-rc.6 (2022-07-28)

Bug Fixes

  • dynamic append js-module script error (#18) (1181351)

1.0.0-rc.5 (2022-07-27)

Bug Fixes

  • 修复webpack publicPath为auto无法加载资源问题 (7e2fd28)

1.0.0-rc.4 (2022-07-15)

Bug Fixes

  • 修复vite子应用css3变量没有生效 (#12) (261bc01)

1.0.0-rc.3 (2022-07-08)

Bug Fixes

  • 添加onEvent回调事件类型判断 (a52238e)

1.0.0-rc.2 (2022-07-07)

Bug Fixes

  • 修复document无法设置事件回调 (aba63ed)

1.0.0-rc.1 (2022-07-05)

Features