上图省略部分方法,详情请看本节末尾的Demo实例,代码实现的目的是为了构建html
文件作为子应用的入口,构建结果如下所示👇
其他环节跟基于Webpack的配置大致相同,这里不一一赘述
虽然这种方式针对生产模式可以实现集成,但是存在两个局限性:
- 我们知道为了让
qiankun
拿到子应用export
的生命周期函数,所以需要将子应用打包成umd
格式,而vite的code-splitting(代码分割)功能并不支持iife
和umd
两种格式,这会导致路由无法实现懒加载。
- 图片最终会被打包成
base64
更详细的Demo集成例子:👉 app-vue-vite
2.2 解决开发模式 + 生产模式的集成
单独解决生产模式的集成也不方便,毕竟很多时候需要我们在本地环节进行调试,那有什么方式可以同时让Vite支持这两种模式的集成呢?
Github上有一名开源作者开发了一款Vite插件叫vite-plugin-qiankun
,通过这个插件可以在qiankun下走通这两种模式。甚至保留了vite构建模块的优势
- 修改
Vite.config.js
2. 修改子应用的main.ts
,将生命周期mount
、bootstrap
、unmount
等通过插件函数renderWithQiankun
在其中暴露完成。其他配置与基于webpack构建的子应用相同
⏰ 注意事项:
- qiankun官方是以
window.__POWERED_BY_QIANKUN__
来判断当前是否为qiankun环境下,而该插件引用之后是通过qiankunWindow.__POWERED_BY_QIANKUN__
来判断
🐸 局限性:
- 生产模式下依旧不支持
publicPath
, 需要将vite.config.js
中base
配置写死。导致多环境部署不便捷。无法像在webpack结合window.INJECTED_PUBLIC_PATH_BY_QIANKUN
+publicpath
来解决
更详细的Demo集成例子:👉 viteapp
2.3 Vite对runtime publicpath的支持
目前在Vite官方文档没查阅到相关的配置,但在Github中找到一个插件vite-plugin-dynamic-publicpath。如果你有更好的解决方案,也欢迎评论区留言
2.4 关于Vite的Dotenv配置
如果你从 vue-cli 切换到Vite 需要注意 Dotenv 命名的变化
vite
前缀是VITE_
,vue-cli
是VUE_APP_
- 获取方式也不一样,在
vite
是通过import.meta.env
,而在vue-cli
则是通过process.env
3.最后
如果你有其他解决方式,欢迎在评论区留言,也可以加我微信,我们一起喝茶🍵 讨论