无界微前端框架是由腾讯团队推出的,旨在解决现有微前端方案中存在的问题,如适配成本高、样式隔离困难、运行性能不佳、页面白屏、子应用通信复杂、子应用保活机制缺乏等。
无界微前端的核心技术是基于Web Components容器 + iframe沙箱。通过这种方式,它可以实现以下目标:
下面是一个简单的代码示例,展示如何使用无界框架加载一个微应用:
假设您的主应用使用的是React或Vue,您可以这样配置无界:
- // main.js
- import Wujie from '@wujiejs/wujie';
-
- const wujie = new Wujie({
- container: '#app', // 主容器的选择器
- apps: [
- {
- name: 'app1', // 微应用名称
- entry: '//localhost:8080', // 微应用入口URL
- activeRule: '/app1' // 激活规则
- }
- ]
- });
-
- wujie.start();
-
子应用需要做一些简单的配置以便被无界识别:
- <!-- app1/index.html -->
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>App1</title>
- <script src="@wujiejs/wujie/client.js"></script>
- </head>
- <body>
- <div id="root"></div>
- <script>
- // 注册子应用
- window.__WUJIE__.registerApp('app1');
- </script>
- </body>
- </html>
-
无界微前端框架通过多种机制来简化子应用之间的通信,确保通信既简单又高效。
无界提供了以下几种通信机制:
假设有一个子应用 app1 和一个主应用,app1 向主应用发送消息:
- // 在子应用 app1 中发送消息
- window.parent.postMessage({ type: 'CUSTOM_EVENT', payload: 'Hello from app1!' }, '*');
-
- // 在主应用中监听消息
- window.addEventListener('message', function(event) {
- if (event.origin === 'http://localhost:8080') { // 确保来源正确
- if (event.data.type === 'CUSTOM_EVENT') {
- console.log('Received message:', event.data.payload);
- }
- }
- });
-
假设有一个事件总线,子应用可以通过它发送和接收事件:
- // 在子应用 app1 中注册事件监听器
- window.__WUJIE__.on('CUSTOM_EVENT', function(data) {
- console.log('Received event:', data);
- });
-
- // 在主应用或其他子应用中发送事件
- window.__WUJIE__.emit('CUSTOM_EVENT', { message: 'Hello from main app!' });
-
主应用可以向子应用传递数据:
- // 主应用配置
- const wujie = new Wujie({
- container: '#app',
- apps: [
- {
- name: 'app1',
- entry: '//localhost:8080',
- activeRule: '/app1',
- props: {
- message: 'Hello from the main app!'
- }
- }
- ]
- });
-
- // 子应用 app1 接收数据
- console.log(window.__WUJIE__.getProps().message); // 输出 "Hello from the main app!"
-
与另一款流行的微前端框架 qiankun 相比,无界在子应用通信方面有以下优势:
无界微前端框架通过提供多样化的通信机制,简化了子应用之间的通信流程,使得开发人员可以轻松地构建出高度可扩展且维护性良好的微前端应用。与 qiankun 相比,无界在通信灵活性和安全性方面具有显著优势。