使用 umi 3 创建子应用并接入主应用

blueju
• 阅读 1818

使用 umi 3 创建子应用并接入主应用

前言:
umi 3 更新频繁,文档不完善,时效性不定,因此前提条件很重要,今天是2020年8月21日。

创建子应用使用的脚手架是:umi 3
创建主应用使用的脚手架是:um 2,但是本篇文章暂时不介绍创建主应用的过程及在主应用中的配置过程。

1. 创建 umi 3 工程

命令行

yarn create @umijs/umi-app

2. 安装 umi 3 的 qiankun 插件

创建的 umi 3 并不包含 qiankun 插件,需要自己安装。

yarn add @umijs/plugin-qiankun -D

3. 添加 package.json 的 name

在 package.json 中添加属性 name,name值为你的项目名,请自定义。

4. 在子应用中配置

参考:https://umijs.org/zh-CN/plugins/plugin-qiankun#第一步:插件注册(configjs)

4.1 插件注册

对于 umi 3,需要在子应用的配置( .umirc.ts )中,添加下面这部分代码:

qiankun: {
  slave: {}
}

添加后效果如下:
使用 umi 3 创建子应用并接入主应用

4.2 配置运行时生命周期钩子(可选)

如果需要在子应用的生命周期期间加一些自定义逻辑,可以在子应用的 src/app.ts 里导出 qiankun 对象,并实现每一个生命周期钩子,其中钩子函数的入参 props 由主应用自动注入。

需要注意的是,在由 umi 3 脚手架创建的工程中,src 目录下并没有 app.ts 文件,这需要自己创建,并将如下代码 copy and paste。

export const qiankun = {
  // 应用加载之前
  async bootstrap(props) {
    console.log('app1 bootstrap', props);
  },
  // 应用 render 之前触发
  async mount(props) {
    console.log('app1 mount', props);
  },
  // 应用卸载之后触发
  async unmount(props) {
    console.log('app1 unmount', props);
  },
};


至此,这一阶段的工作已经完成,虽然如果没有对 umi 的整体了解下去看本篇文章会云里雾里,但还是希望能给在此部分有所困惑而停滞的同学提供帮助。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
blueju blueju
3年前
umi +qiankun 主应用动态装载子应用(路由)解决方案
<aname"p1boA"</a前言接上一篇(),上一篇中使用的都是运行时动态注册子应用,子应用路由仍然是写死的、非动态获取。<br/<br/然后真实项目中除了需要动态注册子应用,还很有可能需要动态装载子应用(路由),比如说:不同权限的用户需要给予他们不同的路由。<br/<br/此篇blog的代码是基于上一篇进行改动的,上一篇
blueju blueju
3年前
umi 项目多环境打包配置
参考:1.1.1.<br/我的需求:在不同环境(dvl、sit)下打包,请求基础地址也需要随环境的变化而改变<br/遇到的困难:umiv3文档不完善未知bug<aname"K770H"</a1.创建不同环境的配置文件此部分可参考:2.<br/需要dvl、sit两个环境,因此创建两个配置文件,如图:<br
blueju blueju
3年前
微前端中,为子应用配备开发环境临时导航菜单,提高开发效率
首发于<aname"Ei7d1"</a场景子应用开发过程中,势必需要频繁地切换菜单,但因为子应用打包后是要接入到基座的,因此不能有菜单等。但如此的话,日常的开发又会不方便,甚至影响开发效率。但我的个人直觉,貌似更正确的做法是:将子应用直接接入到基座中开发调试,因此目前场景下,我们需要的是:<br/在开发环境下,我们希望有菜单,方便我们开发人员进入
blueju blueju
3年前
umi + qiankun 动态注册子应用解决方案
前言首发于<br/本篇文章可以被视为上一篇文章()的延续,上一篇文章大致讲述了搭建一个简易微前端平台的过程,其中关于子应用注册的配置是通过硬编码的方式,在构建打包前写入的。<br/<br/但是真实项目中,更需要的是动态注册子应用,比如说我正参与的这个项目。<br/<br/本篇文章的示例代码是基于上一篇文章示例代码改动的,上一篇文
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Karen110 Karen110
3年前
Django网站实战——手把手带大家制作一个经典的网站
一、前言今天小编带大家制作一个经典的网站的案例,功能包括登录、注册、注销、改密、免密登录、忘记密码,那么下面就让我们开始吧。二、创建项目并创建子应用首先创建项目,然后在项目根目录下创建子应用,如下:djangoadminstartprojectdemo创建项目pythonmanage.pystartappweb创建子应用三、配置进入项
Stella981 Stella981
3年前
HttpClient使用总结
<divclass"htmledit\_views"<h1<aname"t0"</a一、使用方法</h1<p使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。<br1.创建HttpClient对象。<br2.创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需
Stella981 Stella981
3年前
HTML5新增input标签属性
一.inputtype属性1<formaction""2邮箱<inputtype"email"name""id""<inputtype"submit"value"提交"<br/<br/3手机号码<inputtype"tel"name
Stella981 Stella981
3年前
Jupyter notebook使用技巧大全
点击上方“蓝字”,轻松关注!(https://oscimg.oschina.net/oscnet/3a406a00d29b44568aebb8be9d319d3b.gif)JupyterNotebook简介JupyterNotebook是一款开源的web应用,它允许使用者创建和分享包含代码,公式,可