无界微前端框架(Wujie)快速入门指南

无界微前端框架(Wujie)快速入门指南

什么是无界微前端框架

无界(Wujie)是一款轻量级的微前端解决方案,它能够帮助开发者轻松实现多个独立前端应用的集成与协同工作。与传统的iframe方案相比,无界提供了更好的性能和更灵活的集成方式,同时保持了子应用的独立性。

主应用集成步骤

1. 安装与引入

首先需要在主应用中引入无界框架的核心模块:

import { bus, setupApp, preloadApp, startApp, destroyApp } from "wujie";

对于Vue或React项目,可以直接使用对应的封装组件,简化集成流程。

2. 配置子应用参数

使用setupApp方法可以预先设置子应用的默认参数,避免重复配置:

setupApp({
  name: "subApp1",  // 子应用唯一标识
  url: "https://subapp.example.com",  // 子应用地址
  exec: true,  // 是否执行子应用脚本
  el: "#container",  // 挂载容器
  sync: true  // 是否同步路由
});

3. 预加载优化

为了提高用户体验,可以使用preloadApp预先加载子应用资源:

preloadApp({ name: "subApp1" });

4. 启动子应用

当需要显示子应用时,调用startApp方法:

startApp({ name: "subApp1" });

子应用改造指南

无界对子应用的改造要求极低,在大多数情况下,子应用几乎不需要任何修改即可集成。

跨域配置

由于子应用资源将在主应用域名下加载,需要确保子应用服务器配置了正确的CORS策略。以下是一个Node.js服务器的示例配置:

app.use((req, res, next) => {
  res.set({
    "Access-Control-Allow-Credentials": true,
    "Access-Control-Allow-Origin": req.headers.origin || "*",
    "Access-Control-Allow-Headers": "X-Requested-With,Content-Type",
    "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS",
    "Content-Type": "application/json; charset=utf-8",
  });
  next();
});

运行模式适配

无界支持三种运行模式,不同模式下子应用的改造要求也不同:

  1. 保活模式:子应用无需任何改造
  2. 重建模式:子应用无需任何改造
  3. 单例模式:需要添加生命周期钩子

生命周期改造示例

对于单例模式,需要在子应用中添加挂载和卸载的生命周期函数:

Vue 2.x 改造
if (window.__POWERED_BY_WUJIE__) {
  let instance;
  window.__WUJIE_MOUNT = () => {
    const router = new VueRouter({ routes });
    instance = new Vue({ router, render: (h) => h(App) }).$mount("#app");
  };
  window.__WUJIE_UNMOUNT = () => {
    instance.$destroy();
  };
} else {
  new Vue({ router: new VueRouter({ routes }), render: (h) => h(App) }).$mount("#app");
}
Vue 3.x 改造
if (window.__POWERED_BY_WUJIE__) {
  let instance;
  window.__WUJIE_MOUNT = () => {
    const router = createRouter({ history: createWebHistory(), routes });
    instance = createApp(App);
    instance.use(router);
    instance.mount("#app");
  };
  window.__WUJIE_UNMOUNT = () => {
    instance.unmount();
  };
} else {
  createApp(App).use(createRouter({ history: createWebHistory(), routes })).mount("#app");
}
React 改造
if (window.__POWERED_BY_WUJIE__) {
  window.__WUJIE_MOUNT = () => {
    ReactDOM.render(
      <React.StrictMode>
        <App />
      </React.StrictMode>,
      document.getElementById("root")
    );
  };
  window.__WUJIE_UNMOUNT = () => {
    ReactDOM.unmountComponentAtNode(document.getElementById("root"));
  };
} else {
  ReactDOM.render(
    <React.StrictMode>
      <App />
    </React.StrictMode>,
    document.getElementById("root")
  );
}
特殊处理:Vite项目

由于Vite采用异步加载机制,需要特别注意主动调用无界的渲染函数:

if (window.__POWERED_BY_WUJIE__) {
  let instance;
  window.__WUJIE_MOUNT = () => {
    const router = createRouter({ history: createWebHistory(), routes });
    instance = createApp(App);
    instance.use(router);
    instance.mount("#app");
  };
  window.__WUJIE_UNMOUNT = () => {
    instance.unmount();
  };
  window.__WUJIE.mount(); // 主动调用防止异步问题
} else {
  createApp(App).use(createRouter({ history: createWebHistory(), routes })).mount("#app");
}

最佳实践建议

  1. 预加载策略:对于核心子应用,建议在主应用初始化时进行预加载,提升用户体验
  2. 模式选择:根据业务场景选择合适的运行模式,平衡性能和内存消耗
  3. 错误处理:为子应用加载添加适当的错误处理和降级方案
  4. 性能监控:监控子应用加载时间和运行性能,持续优化

通过以上步骤,您可以轻松地将无界微前端框架集成到您的项目中,实现多个前端应用的协同工作。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹岩讳Sally

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值