yuzhanglong / mf-lite

:tada: 优雅且实用的基于 webpack module federation 的微前端解决方案 / Elegant and practical micro front-end solution based on webpack module federation.
https://yuzhanglong.feishu.cn/wiki/wikcncmRDZCUJRigluH7skQbtvg
MIT License
160 stars 20 forks source link

通过exposes共享第三方依赖的问题 #50

Closed typistZxd closed 1 year ago

typistZxd commented 1 year ago

假设将lodash通过exposes实现共享,那能够满足其他app中import {get} from 'lodash'的使用,但是import get from 'lodash/get'这种带路径就不行了,而且不能保证所有第三方依赖包都在入口有暴露

yuzhanglong commented 1 year ago

我不推荐打包 lodash expose 出去,expose 的行为是一个全量打包,lodash 太大了,而且每个工具的粒度都比较小,肯定不会全量用到。与其全量打包还不如各个子应用各自安装,在粒度比较小的情况下 treeshaking 机制能起到很好的作用。

yuzhanglong commented 1 year ago

假设将lodash通过exposes实现共享,那能够满足其他app中import {get} from 'lodash'的使用,但是import get from 'lodash/get'这种带路径就不行了,而且不能保证所有第三方依赖包都在入口有暴露

不过,如果需要单独暴露出若干个方法可以使用一个中间文件,然后expose 出去这个中间文件,这样就可以享受treeshaking

typistZxd commented 1 year ago

由于expose出来的是无状态的模块,但是有些依赖会在模块内部闭包维护一些状态(比如vue-router),运行时会加载两份同样的模块(不同app各自加载一份),这方面有考虑么?

yuzhanglong commented 1 year ago

由于expose出来的是无状态的模块,但是有些依赖会在模块内部闭包维护一些状态(比如vue-router),运行时会加载两份同样的模块(不同app各自加载一份),这方面有考虑么?

应该不会把,假设两个微应用都消费基座的 expose,应该是可以复用的吧