初探 MicroApp,一个极致简洁的微前端框架

本文介绍了MicroApp,一个轻量级的微前端框架,对比了与qiankun的区别,并展示了如何接入React和Vue微应用,强调其简单易用、零依赖和跨框架兼容的特点。通过数据通信、高级功能如生命周期管理和插件系统的介绍,展现了MicroApp在微前端领域的潜力。
摘要由CSDN通过智能技术生成

前言

哈喽大家好,我是海怪。

在微前端的领域里,相信大家都听说过阿里的 qiankun。我自己在上几个月也一直用它来做一些实践:

在使用过程中我发现 qiankun 还是有一些缺点的:

  • 项目的侵入性依然很强。之前为了在组内推广,都做了 3 次分享,可把我口水说干了
  • qiankun 在沙箱方面依然有不少坑。看去年 qiankun 一年的 Change Log,发现都是在修复沙箱相关的问题

不仅我用 qiankun 难受,京东的小伙伴也用得很难受,所以,京东在去年 7 月推出了自己微前端解决方案 —— MicroApp。今天就带大家初探一下这个新星微前端框架吧。

特色

MicroApp 一上来就表明了自己的立场:

micro-app 并没有沿袭 single-spa 的思路

借鉴了 WebComponent 的思想,micro-app 通过 CustomElement 结合自定义的 ShadowDom,将微前端封装成一个类 WebComponent 组件,从而实现微前端的组件化渲染。

它在 基座应用子应用 之间充当桥梁胶水的作用。

有下面的优势:

  • 使用简单。 将功能封装到 WebComponent 中
  • 零依赖。 无依赖、更高的扩展性
  • 兼容所有框架 技术栈无关

下面我们直接开箱看看 micro-app 能给我们带来什么样的惊喜吧。

注:所有代码都放在 Github 项目 中。

架构

虽然官方也给出了完整的 样例 ,不过里面代码太多了,所以我就弄一个简单一点的项目,架构如下:

起步

主应用使用 create-react-app 创建 React 项目:

npx create-react-app bigass-micro-app

然后安装 micro-app

npm i @micro-zoe/micro-app --save

创建完了后,先用 React Router 来搭建基座应用的路由系统:

const App = () => {
   
  return (
    <BrowserRouter>
      <div>
        <header className={
   styles.header}>
          <Link to="/">基座 Home</Link>
          <Link to="/about">基座 About</Link>
        </header>

        <Routes>
          <Route path="/" element={
   <Home/>}/>
          <Route path="/about" element={
   <About/>}/>
        </Routes>
      </div>
    </BrowserRouter>
  );
}

就有最简单的路由了:

添加 React 微应用

接下来我们再添加一个 React 应用作为这个项目的微应用。 /apps 目录下也用 create-react-app 创建一个新的 React 应用,并在 pcakge.json 里更改访问端口:

"scripts": {
   
  "start": "BROWSER=none PORT=3001 react-scripts start",
}

添加 public-path.js

// __MICRO_APP_ENVIRONMENT__和__MICRO_APP_PUBLIC_PATH__是由micro-app注入的全局变量
if (window.__MICRO_APP_ENVIRONMENT__) {
   
  // eslint-disable-next-line
  __webpack_public_path__ = window.__MICRO_APP_PUBLIC_PATH__
}

在微应用的 入口的第一行 引入它:

import './public-path'
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(<App />, document.getElementById('root'));

这一步主要是避免子应用的静态资源使用相对地址时加载失败的情况。

并在 devServer 设置跨域访问:

headers: {
   
  'Access-Control-Allow-Origin': '*',
}

同样添加简单的路由:

function App() {
   
  return (
    <div>
      <BrowserRouter basename={
   window.__MICRO_APP_BASE_ROUTE__ || '/'}>
        <div>
          <header className={
   styles.header}>
            <Link to="/">react-app Home</Link>
            <Link to="/about">react-app About</Link>
          </header>

          <Routes>
            <Route path="/" element={
   <Home/>}/>
            <Route path="/about" element={
   <About/>}/>
          </Routes>
        </div>
      </BrowserRouter>
    </div>
  );
}

现在 npm run start 后就可以在 http://localhost:3001 里访问它了。

接入 React 微应用

首先在基座应用的 入口 处启用 micro-app

// index.jsx
import microApp from '@micro-zoe/micro-app'

microApp.start()

ReactDOM.render(<App />, document.getElementById('root'));

接下来在基座应用里添加一个承载微应用的组件 ReactMicroApp

// ReactMicroApp.jsx
const ReactMicroApp = () => {
   
  return (
    <div>
      <h1>react
MicroApp 前端是一种软件架构模式,它允许开发者构建大型应用的同时保持高度模块化和解耦。在这种架构下,应用程序可以由多个独立、自主管理的小型应用(即 MicroApps)组成,每个 MicroApp 都拥有自己的渲染逻辑、状态管理、路由系统等。这种设计能够促进团队协作效率、提高系统的维护性和可扩展性。 ### MicroApp 的特点: 1. **模块化**:每个 MicroApp 可以独立部署、升级和维护,减少了对整个系统的影响。 2. **复用性**:共享功能和组件可以在不同的 MicroApp 中重用,降低开发成本并提高代码质量。 3. **灵活性**:由于各个部分相互独立,可以根据需要添加、删除或修改特定功能而不会影响其他部分。 4. **高性能**:通过仅加载所需的 MicroApp 部分到用户界面,可以提升整体性能和响应速度。 5. **安全隔离**:每个 MicroApp 都有其独立的安全边界,提高了系统的整体安全性。 ### 实现方式: 实现 MicroApp 前端的方式通常包括引入前端框架和库如 React、Angular、Vue 等,以及相应的工具和技术栈,比如使用 Webpack 进行打包、使用 SPA (单页应用) 技术处理路由切换、使用服务端渲染技术增强 SEO 等。关键在于如何将这些小型应用集成在一起,协同工作,并确保它们之间的通信流畅、数据同步准确。 ### 应用场景: - 开发复杂的企业级应用,便于团队分工合作。 - 实现快速迭代,只需更新受影响的 MicroApp 即可,无需重启整个应用。 - 提高应用的可测试性和稳定性,因为每个小应用都是相对独立且容易测试的单元。 ### 结论: MicroApp 前端提供了一种现代化的应用构建策略,强调了敏捷开发、高效协作与持续优化的核心价值。随着技术的发展和需求的变化,这种架构模式在现代软件工程领域得到了广泛的认可和采用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写代码的海怪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值