微前端 受众 什么是微前端 微前端的优势 微前端的几种实现方式 入门 进阶

受众

希望将某个单一的单体应用,转化为多个可以独立运行、独立开发、独立部署、独立维护的服务或者应用的聚合,从而满足业务快速变化及分布式多团队并行开发的需求的研发团队。

什么是微前端

微前端架构是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用可以独立运行、独立开发、独立部署。

微前端的优势

  1. 在同一页面上使用多个前端框架 而不用刷新页面 (React, AngularJS, Angular, Ember, 你正在使用的框架)
  2. 独立部署每一个单页面应用
  3. 新功能使用新框架,旧的单页应用不用重写可以共存
  4. 改善初始加载时间,迟加载代码

微前端的几种实现方式

  1. 路由分发式微前端
  2. 使用iFrame创建容器
  3. 自制框架兼容应用
  4. 组合式集成:将应用微件化
  5. 纯Web Components技术构建
  6. 结合Web Components构建
  7. 在Web Components中集成现有框架
  8. 集成在现有框架中的 Web Components
  9. 复合型
    复合型,就是针对实际的应用场景,选取上面的几个类型挑几种组合起来解决实际问题。
    参考:https://www.jianshu.com/p/785c2ca5a886

这里我们采用路由分发式前端,来看它的代表框架-qiankun。

入门

安装

npm i qiankun -S

使用

import { registerMicroApps, start } from 'qiankun';
registerMicroApps([
  {
    name: 'reactApp',
    entry: '//localhost:3000',
    container: '#container',
    activeRule: '/app-react',
  },
  {
    name: 'vueApp',
    entry: '//localhost:8080',
    container: '#container',
    activeRule: '/app-vue',
  },
  {
    name: 'angularApp',
    entry: '//localhost:4200',
    container: '#container',
    activeRule: '/app-angular',
  },
]);
// 启动 qiankun
start();

进阶

微应用不需要额外安装任何其他依赖即可接入 qiankun 主应用。

1.导出相应的生命周期钩子

微应用需要在自己的入口 js (通常就是你配置的 webpack 的 entry js) 导出 bootstrap、mount、unmount 三个生命周期钩子,以供主应用在适当的时机调用。

/**
* bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。
* 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。
 */

export async function bootstrap() {

 console.log('react app bootstraped');

}

/**

* 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法

 */

export async function mount(props) {

 ReactDOM.render(<App />, props.container ? props.container.querySelector('#root') : document.getElementById('root'));

}

/**

* 应用每次  切出/卸载  会调用的方法,通常在这里我们会卸载微应用的应用实例

 */

export async function unmount(props) {

 ReactDOM.unmountComponentAtNode(

 props.container ? props.container.querySelector('#root') : document.getElementById('root'),

 );

}

/**

* 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效

 */

export async function update(props) {

 console.log('update props', props);

}

qiankun 基于 single-spa,所以你可以在这里找到更多关于微应用生命周期相关的文档说明。

无 webpack 等构建工具的应用接入方式请见这里

2.配置微应用的打包工具

除了代码中暴露出相应的生命周期钩子之外,为了让主应用能正确识别微应用暴露出来的一些信息,微应用的打包工具需要增加如下配置:

webpack:

const packageName = require('./package.json').name;

module.exports = {

 output: {

 library: `${packageName}-[name]`,

 libraryTarget: 'umd',

 jsonpFunction: `webpackJsonp_${packageName}`,

 },

};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章