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

前言

哈喽大家好,我是海怪。

在微前端的领域里,相信大家都听说过阿里的 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
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写代码的海怪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值