Qiankun 2.0.24技术记录
2023-11-12 13:32:41
前言
qiankun 作为微前端的解决方案之一,它利用了 single-spa 的思想,可以很方便地将子应用嵌入到主应用中,并且可以动态地加载和卸载子应用,从而实现按需加载,改善了页面的加载速度和性能。
本文将详细记录我在使用 qiankun 2.0.24 踩过的坑以及对应的解决办法,希望能为其他开发人员在使用 qiankun 时提供参考和帮助。
踩过的坑
1. 跨域问题
在开发 qiankun 时,经常会遇到跨域问题,这是因为子应用和主应用的域不同导致的。为了解决跨域问题,我们可以通过配置代理服务器来解决。
代理服务器的作用是将子应用的请求转发到主应用的域下,从而解决跨域问题。常用的代理服务器有 nginx、webpack-dev-server 等。
2. 路由问题
在使用 qiankun 时,经常会遇到路由问题,这是因为主应用和子应用的路由规则不同导致的。为了解决路由问题,我们可以通过配置 qiankun 的路由规则来解决。
qiankun 的路由规则可以通过 qiankun.use()
方法来配置,我们可以通过该方法来指定子应用的路由规则和主应用的路由规则。
3. 样式问题
在使用 qiankun 时,经常会遇到样式问题,这是因为子应用和主应用的样式冲突导致的。为了解决样式问题,我们可以通过配置 qiankun 的样式隔离规则来解决。
qiankun 的样式隔离规则可以通过 qiankun.useStyleIsolation()
方法来配置,我们可以通过该方法来指定子应用的样式隔离规则和主应用的样式隔离规则。
4. 通信问题
在使用 qiankun 时,经常会遇到通信问题,这是因为子应用和主应用之间需要通信导致的。为了解决通信问题,我们可以通过配置 qiankun 的通信规则来解决。
qiankun 的通信规则可以通过 qiankun.useMessage()
方法来配置,我们可以通过该方法来指定子应用和主应用之间的通信规则。
解决办法
1. 跨域问题的解决办法
- 使用代理服务器来解决跨域问题。
- 在子应用的
package.json
文件中添加"proxy": "http://localhost:3000"
字段,其中"http://localhost:3000"
为代理服务器的地址。
2. 路由问题的解决办法
- 通过
qiankun.use()
方法来配置子应用的路由规则和主应用的路由规则。 - 在子应用的
src/index.js
文件中添加以下代码:
import { createApp } from 'vue'
import App from './App.vue'
import { qiankun } from 'qiankun'
const instance = createApp(App)
qiankun.use('sub-app', {
// 子应用的路由规则
routes: [
{
path: '/sub-app',
component: instance
}
]
})
instance.mount('#app')
在主应用的 src/main.js
文件中添加以下代码:
import { createApp } from 'vue'
import App from './App.vue'
import { qiankun } from 'qiankun'
const instance = createApp(App)
qiankun.use('sub-app', {
// 主应用的路由规则
routes: [
{
path: '/sub-app',
component: instance
}
]
})
instance.mount('#app')
3. 样式问题的解决办法
- 通过
qiankun.useStyleIsolation()
方法来配置子应用的样式隔离规则和主应用的样式隔离规则。 - 在子应用的
src/index.js
文件中添加以下代码:
import { createApp } from 'vue'
import App from './App.vue'
import { qiankun } from 'qiankun'
const instance = createApp(App)
qiankun.useStyleIsolation({
// 子应用的样式隔离规则
name: 'sub-app'
})
instance.mount('#app')
在主应用的 src/main.js
文件中添加以下代码:
import { createApp } from 'vue'
import App from './App.vue'
import { qiankun } from 'qiankun'
const instance = createApp(App)
qiankun.useStyleIsolation({
// 主应用的样式隔离规则
name: 'main-app'
})
instance.mount('#app')
4. 通信问题的解决办法
- 通过
qiankun.useMessage()
方法来配置子应用和主应用之间的通信规则。 - 在子应用的
src/index.js
文件中添加以下代码:
import { createApp } from 'vue'
import App from './App.vue'
import { qiankun } from 'qiankun'
const instance = createApp(App)
qiankun.useMessage({
// 子应用和主应用之间的通信规则
name: 'sub-app'
})
instance.mount('#app')
在主应用的 src/main.js
文件中添加以下代码:
import { createApp } from 'vue'
import App from './App.vue'
import { qiankun } from 'qiankun'
const instance = createApp(App)
qiankun.useMessage({
// 主应用和子应用之间的通信规则
name: 'main-app'
})
instance.mount('#app')
注意问题
在使用 qiankun 时,需要注意以下问题:
- 子应用和主应用必须使用相同的版本号。
- 子应用和主应用必须使用相同的打包工具。
- 子应用和主应用必须使用相同的路由器。
- 子应用和主应用必须使用相同的样式隔离库。
- 子应用和主应用必须使用相同的通信库。