目标
之前我只是确认了诸如
qiankun
等工具对我没有帮助,直到遇到无法克服的问题,我才不得不自行设计一个框架 当时摆在我面前的是这么一个情况:
- 最新的项目和未来的项目都是
vite
构建 - 很多老旧的项目仍是服务端渲染,不是
ssr
而是类似jsp
,没有使用到vue
等视图框架 - 通过浏览器插件,往现有项目直接插入仪表盘,且保持隔离,尤其是样式隔离
- 老旧项目若作为子项目,应保留
seo
的效果 - 模块联邦的部分也要进行隔离
这也就等同于
- 框架能够优先支持esm,而非仅仅兼容
- 没有使用视图框架,意味着没办法通过
vue.mount
/vue.destroy
控制应用挂载与卸载,很难编写暴露的生命周期钩子 框架必须保证子应用在不编写钩子、乃至于不做任何改造下正常运行 - 基于
web component
,支持组件化 - 保留子应用的
ssr
效果 - 接收
html
/js
两种入口 其中第1.2条必须做到,第3.4.5条尽力而为,
merak
就是按照这个目标前进的:
- 完全放弃标签劫持,利用编译端实现改造
- 支持
iframe
模式 - 通过
proxy
,确保子应用的所有部分均在web component
中(2.3和无界一致) - 支持
ssr
模式 - 支持库模式