vite3项目接入qiankun微前端

背景

前端时间对vite3项目接入了qiankun微前端,对操作过程和遇到的坑做一些整理,废话不多说,直接上代码。

1、在 vite.config.ts 中安装插件
// vite.config.ts

import qiankun from 'vite-plugin-qiankun';

export default {
  // 这里的 'myMicroAppName' 是子应用名,主应用注册时AppName需保持一致
  plugins: [qiankun('myMicroAppName')],
  // 生产环境需要指定运行域名作为base
  base: 'http://xxx.com/'
}
2、在入口文件里面写入乾坤的生命周期配置
// main.ts
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper';

// some code
renderWithQiankun({
  mount(props) {
    console.log('mount');
    render(props);
  },
  bootstrap() {
    console.log('bootstrap');
  },
  unmount(props: any) {
    console.log('unmount');
    const { container } = props;
    const mountRoot = container?.querySelector('#root');
    ReactDOM.unmountComponentAtNode(
      mountRoot || document.querySelector('#root'),
    );
  },
});

if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
  render({});
}
3、dev下作为子应用调试

因为开发环境作为子应用时与热更新插件(可能与其他修改html的插件也会存在冲突)有冲突,所以需要额外的调试配置

// useDevMode 开启时与热更新插件冲突,使用变量切换
const useDevMode = true

const baseConfig: UserConfig = {
  plugins: [
    ...(
      useDevMode ? [] : [
        reactRefresh()
      ]
    ),
    qiankun('viteapp', {
      useDevMode
    })
  ],
}

上面例子中 useDevMode = true 则不使用热更新插件,useDevMode = false 则能使用热更新,但无法作为子应用加载。

4、其它使用注意点 qiankunWindow

因为es模块加载与qiankun的实现方式有些冲突,所以使用本插件实现的qiankun微应用里面没有运行在js沙盒中。所以在不可避免需要设置window上的属性时,尽量显示的操作js沙盒,否则可能会对其它子应用产生副作用。qiankun沙盒使用方式

import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper';

qiankunWindow.customxxx = 'ssss'

if (qiankunWindow.__POWERED_BY_QIANKUN__) {
  console.log('我正在作为子应用运行')
}
5、静态资源加载

完成接入后,在主应用中静态资源加载有异常,这个时候需要调整 vite.config.js配置

export default defineConfig({
  base: process.env.NODE_ENV === 'development' ? 'http://localhost:8084/' : 'https://lxq.q-gp.com/', // 根据构建模式不同设置对应的基础连接
  server: {
    port: 8084, //调整终端
    cors: true,
    origin: 'http://localhost:8084/', // 设置开发服务器origin
  },

对应引用的静态资源处,如果使用的相对路径需要调整为路径别名引用

<template>
  <div class="home">
<!--     // 使用@ 路径别名 -->
    <img alt="Vue logo" src="@/assets/logo.png" />
    <p>Welcome to Your Vue.js + TypeScript App</p>
  </div>
</template>

<script lang="ts">
  import { defineComponent } from 'vue';

  export default defineComponent({
    name: 'Home',
  });
</script>
6、路由调整

如果按以上方式页面没有加载,控制台报[Vue Router warn]: No match found for location with path "/micro/monitor-system"这样的错误,需要调整子应用的路由base选项
image.png

import { createRouter, createWebHistory } from 'vue-router';

const router = createRouter({
  history: createWebHistory('/micro/monitor-system'), // 配置路由base 
});

export default router;
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Vue3 Vite 项目中,你可以使用 JavaScript 的 fetch API 或者 Axios 库来调用接口。下面分别介绍这两种方法。 1. 使用 fetch API fetch API 是浏览器原生提供的用于发送网络请求的 API,可以使用它来调用接口。示例代码如下: ```javascript fetch('/api/user') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)) ``` 上面的代码中,我们使用 fetch 函数发送了一个 GET 请求,请求地址为 `/api/user`。fetch 函数返回一个 Promise 对象,我们可以使用 then 方法来处理响应数据。在第一个 then 回调函数中,我们调用 response.json() 方法将响应数据转换为 JavaScript 对象。最后使用 catch 方法处理错误信息。 2. 使用 Axios 库 Axios 是一个基于 Promise 的 HTTP 库,可以在浏览器和 Node.js 中使用。它可以发送 GET、POST、PUT、DELETE 等多种请求,并支持请求和响应的拦截、请求取消、自动转换 JSON 数据等功能。在 Vue3 Vite 项目中,我们可以使用 Axios 库来调用接口。示例代码如下: ```javascript import axios from 'axios' axios.get('/api/user') .then(response => console.log(response.data)) .catch(error => console.error(error)) ``` 上面的代码中,我们使用 Axios 库发送了一个 GET 请求,请求地址为 `/api/user`。Axios 库返回一个 Promise 对象,我们可以使用 then 方法来处理响应数据。在第一个 then 回调函数中,我们调用 response.data 属性获取响应数据。最后使用 catch 方法处理错误信息。 注意:在使用 Axios 库之前,需要先安装它。你可以在终端中输入以下命令来安装 Axios 库: ``` npm install axios ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sprialmint

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

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

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

打赏作者

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

抵扣说明:

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

余额充值