alibaba / ice

🚀 ice.js: The Progressive App Framework Based On React(基于 React 的渐进式应用框架)
https://ice.work
MIT License
17.85k stars 2.1k forks source link

关于 MPA 模式的说明 #5551

Open wssgcg1213 opened 2 years ago

wssgcg1213 commented 2 years ago

https://github.com/ice-lab/ice-next/issues/675 ice 3 默认不支持 MPA 模式,一些场景如果支持需要有文档说明

背景

ice 3 为了统一运行时和业务技术方案,不再区分 SPA 和 MPA,通过 SPA 下的拆包逻辑来达到访问路由时仅加载当前路由资源的效果。 但由于框架运行时默认依赖了 react-router,这部分代码对于 MPA 场景是多余的,在一些代码体积敏感的场景下需要提供对应的解决方案。

解决方案

强制移除 react-router 的依赖

目前已实现在 ice.config.mts 中配置 optimization.router,并且当前路由仅为一个的时候,将会移除 react-router 的依赖。

https://github.com/alibaba/ice/blob/dbcde911b6551f4aded4b165766ae88bc783e2b6/packages/ice/src/createService.ts#L152-L155

如果明确业务场景跳转不依赖 react-router 可以增加强制移除 react-router 选项

monorepo 方案

monorepo 方案更适用于极端场景:

TODO:具体 monorepo 方案推荐以最佳实践的方式输出

chenjun1011 commented 1 year ago

贴一下之前跑的数据

纯 react 应用 和 react + router 的应用,在 Reno3 下测试 25 次下来

所以是否有必要提供传统的 MPA ?

ClarkXia commented 1 year ago

单独因为 react-router 引入的影响是不大的,主要是看一些复杂的 case 如何支持,比如 issue 中提到的极端场景