项目搭建使用qiankun(乾坤),入门篇,以及遇到的坑与解决

这篇具有很好参考价值的文章主要介绍了项目搭建使用qiankun(乾坤),入门篇,以及遇到的坑与解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微前端架构具备以下几个核心价值:

  • 技术栈无关
    主框架不限制接入应用的技术栈,微应用具备完全自主权

  • 独立开发、独立部署
    微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新

  • 增量升级

    在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略

  • 独立运行时
    每个微应用之间状态隔离,运行时状态不共享

第一步:一个系统里面分主应用子应用

在一个项目中引入另一个项目,则是在主应用引入子应用的。

主应用:

1、在主应用中安装qiankun

$ yarn add qiankun # 或者 npm i qiankun -S

2、在主应用中的 main.js 注册微应用

import { registerMicroApps, start } from 'qiankun'; //引入qiankun的注册和启动

//注册微应用
registerMicroApps([
  {
    name: 'react app', // app name registered
    entry: '//localhost:7100',
    container: '#yourContainer',
    activeRule: '/yourActiveRule',
  },
  {
    name: 'vue app',
    entry: { scripts: ['//localhost:7100/main.js'] },
    container: '#yourContainer2',
    activeRule: '/yourActiveRule2',
  },
]);

start();//启动

/*
*解释此作用:
注册应用完成后,路由变换则会自动触发qiankun 的匹配逻辑,所有 activeRule 规则匹配上的微应用就会被插入到指定的 container 中
*/

3、在主应用中,你需要引入的vue页面中添加对应的id

<div id="app">
    <!--如果路由触发qiankun的自动匹配机制匹配上的话,则会渲染在对应的id上 -->
    <div id="yourContainer"></div> 
    <div id="yourContainer2"></div>
</div>

4、在主应用中 ,vue.config.js里面允许跨域

vue.config.js//配置文件中
devServer: {
    headers: {
      'Access-Control-Allow-Origin': '*'
    }
}

 

微应用:

在被引入的项目中,不用再安装乾坤,可以直接主应用

1、在微应用中,在main.js中可以使用对应的生命周期钩子

/**
 * 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);
}

2、在微应用中,在main.js中修改window资源路径,在main.js中引入一个同级的js文件,我命名为public-path.js

main.js

import './public-path.js'

 public-path.js文件内容如下

if (window.__POWERED_BY_QIANKUN__) {
  window.__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__
}

3、在微应用中,在router.js中配置qiankun对应的路径

//因为在主营中监听的是路径/yourActiveRule 
//如果是qiankun引入的话一级路由就是/yourActiveRule 

new VueRouter({
  mode: 'history',
  base: window.__POWERED_BY_QIANKUN__ ? '/yourActiveRule ' : '/'
})

4、在微应用中,webpack的配置要修改输出

//在vue.config.js中添加
const packageName = require('./package.json').name;

module.exports = {
  output: {
    library: `${packageName}-[name]`,
    libraryTarget: 'umd',
    jsonpFunction: `webpackJsonp_${packageName}`,
  },
};

5、在微应用中,vue.config.js中允许跨域

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

踩坑记录:

1、如果你的报错信息是chunk不上或者静态资源404

解决办法有两种:
1、是在main.js 顶部引入一个public-path.js文件 
   import './public-path'

   //public-path.js文件内容如下:
if (window.__POWERED_BY_QIANKUN__) {
  window.__webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__
}



2、使用 webpack 静态 publicPath 配置
在vue.config.js中配置输出静态路径
    output: {
        publicPath: `//localhost:${port}`,
      }

2、百度谷歌地图等第三方js报错 可以在index.html页面的<script>标签添加ignore

例如:<script type="text/javascript" ignore  src="报错的js路径”>文章来源地址https://www.toymoban.com/news/detail-658929.html

到了这里,关于项目搭建使用qiankun(乾坤),入门篇,以及遇到的坑与解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [uniapp] 跨页面传值 uni.$emit 和 uni.$on 的使用方法 以及遇到的坑

    uni.$emit 和 uni.$on 是uniapp自带的跨页面传值    vue 父子通讯可以用 props  this.$emit   这种简单的父子通讯紧适用于 页面和组件 或者 组件之间的传值,他并不适用于页面和页面的互相传值 那要实现页面通讯呢,我们一起来看看uni.$emit 和 uni.$on的使用方法 示例:         A页面

    2024年02月02日
    浏览(10)
  • 安装ceres-solver以及colmap遇到的坑

    参考https://blog.csdn.net/Carry_all/article/details/103224043来进行的安装。途中遇到网络问题和make执行错误的问题。错误如下所示: 通过搜索相关问题,发现是由于自己版本不对导致的(版本过旧和过新都有问题 我使用的是最新版本)。参照https://blog.csdn.net/weixin_43731435/article/details/

    2024年02月15日
    浏览(33)
  • java微信公众号JSAPI支付以及所遇到的坑

    上周做了个支付宝微信扫码支付,今天总结一下。微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊。 笔记地址 http://note.youdao.com/noteshare?id=269ddffb1f95e69eafb281d054f9ff25sub=82AACBC2E6814133938D407BD3FF4737 先梳理下流程,对应的文档 微信统一下

    2024年02月08日
    浏览(12)
  • elasticsearch8和kibana部署以及与springboot整合遇到的坑

    elasticsearch8和kibana部署以及与springboot整合遇到的坑

    我本来使用的是最新版本的es 8.6.2。但是由于ik分词器只更新到8.6.1,所以就更改为部署8.6.1。在过程中遇到一些问题,这里做一个总结 环境:windows10 elasticsearch版本:8.6.1 一、修改es 用户密码的方式 二、kibana 使用用户名和密码登录 修改kibana.yml 文件 启动kibana一直闪退 解决方

    2024年02月02日
    浏览(12)
  • 在AWS(redhat)上搭建jenkins(简易步骤&遇到的坑)

    在AWS(redhat)上搭建jenkins(简易步骤&遇到的坑)

    目录 设置安全组开放端口,创建实例 linux上按照java11  jdk  jenins 涉及到的相关指令列表: 安装步骤: 安装JDK(Amazon Corretto11) 导入镜像  导入公钥 安装jenkins: 遇到的坑: 1.买服务器(亚马逊白嫖一年) 2.买个域名(可有可无) 3.设置安全组开放端口,创建实例 具体步骤省

    2024年01月18日
    浏览(10)
  • eventBus使用遇到的坑

    **问题:**通过eventBus传递的参数,在子组件的methods中无法通过this.使用。 **思路:**考虑组件方法的执行顺序(vue生命周期执行顺序) **解决办法:**在传递参数的组件外 this.$nextTick 创建eventBus.js文件 在需要传递消息的兄弟组件引入该js文件 传递消息 bus.$emit(“test”,param1,pa

    2024年02月14日
    浏览(9)
  • 使用ffmpeg合并视频遇到的坑

    使用ffmpeg合并视频遇到的坑

    下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的,Linux在执行命令前还需要授权。 2.合并视频命令: 坑一:其中第一个花括号替换的是可执行命令所在的绝对路径,这里必须要使用ffmpeg的绝对路径,因为把应用打成jar包是无法获取到绝对路径的,具体可参考:

    2024年02月16日
    浏览(7)
  • 使用vite打包时候遇到的坑

    使用vite打包时候遇到的坑

    最近使用vite写了一个小demo. 记录下其中感悟和遇到的\\\"坑\\\" 开发: 使用vite的开发过程还是很爽的 vite快速生成各种已经搭好的脚手架供开发者选择 开发的运行速度相对于传统的webpack确实快了不少 打包: 在打包的时候遇到了一些坑 打包时资源的路径问题,跟vue-cli里面一样,需要修

    2024年02月04日
    浏览(10)
  • elasticsearch 中热词使用遇到的坑

    elasticsearch 中热词使用遇到的坑

    在使用es检索时,一般会创建索引以及索引下mapping和setting一样配置,如下: 命令创建配置方式: PUT /my_index {   \\\"settings\\\": {     \\\"number_of_shards\\\": 1   },   \\\"mappings\\\": {     \\\"properties\\\": {       \\\"title\\\": {         \\\"type\\\": \\\"text\\\"       },       \\\"releaseTime\\\": {         \\\"type\\\": \\\"date\\\"

    2024年01月19日
    浏览(9)
  • 在 VScode 终端上创建 nuxtjs 项目遇到的问题以及使用 GitHub 遇到的问题和一些个人笔记

    在 VScode 终端上创建 nuxtjs 项目遇到的问题以及使用 GitHub 遇到的问题和一些个人笔记

    这篇文章是关于在vscode终端中创建 nuxtjs项目 的一些步骤,同时还包括了使用 Git、GitHub 的一些操作,以此文章作为笔记,仅供参考。(前提:已经安装nodejs、git) 关于nuxtjs、ssr、服务端渲染、nuxtjs项目结构等等相关知识点这篇文章就不多多介绍了,在后续的文章或笔记中也

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包