qiankun-rewrite
v0.0.2
Published
A completed implementation of Micro Frontends
Downloads
4
Maintainers
Readme
qiankun-rewrite
针对 qiankun 关于 Element, Document 原型链上部分方法打上补丁,从而满足元素隔离的需求。
🤔 Motivation
当使用 qiankun 中loadMicroApp
方法加载两个相同子应用时,其中会产生样式冲突
、选择器冲突
,由于 sandbox 中开启strictStyleIsolation
模式会导致兼容性问题,进而选择了experimentalStyleIsolation
模式来解决样式冲突
的问题。
而开启该模式会导致类似 antd 中 Modal 框样式丢失的问题
因此萌发了代理 Document\Element 原型链上的的方法,使得子应用操作元素的范围在缩小在其容器内,以下该项目的修改点,可以让你清楚评估风险:
👀 Change Points
- 📍 基础版本:[email protected]版本拓展。
- 新增:
<qiankun-body>{template}</qiankun-body>
容器。 - 新增:
appInstanceMap
用于存储 app 实例信息(最外层容器节点)。 - 注入:
document
,document.body
,document.head
打上标记(用于判断是否需要执行 patch) - 补丁:Document\Element 原型链上的方法
| Document | Element | | -------------------------- | ---------------------- | | getElementById | querySelector | | getElementsByName | querySelectorAll | | getElementsByClassName | getElementsByClassName | | getElementsByTagName | getElementsByTagName | | querySelector | appendChild | | querySelectorAll | append | | createElement | prepend | | createElementNS | insertBefore | | rawDocumentCreateElementNS | cloneNode | | | removeChild | | | replaceChild |
📦 Installation
$ yarn add qiankun-rewrite # or npm i qiankun-rewrite -S
📖 TODO
- [x] 元素隔离
- [ ] 路由响应隔离(doing)
- [ ] history 隔离
💿 SelfTest
Inside the examples
folder, there is a sample Shell app and multiple mounted Micro FE apps. To get it running, first clone qiankun
:
$ git clone https://github.com/umijs/qiankun.git
$ cd qiankun
Now install and run the example:
$ yarn install
$ yarn examples:install
$ yarn examples:start
Visit http://localhost:3000
.
🎁 Acknowledgements
- MicroApp inspired by DOM sandbox!