2020-03-07:自以为比较好的微前端框架,还需要解决热打包和多版本依赖问题

主要诉求和存在的问题

  • 这是一个包含多个模块的大型前端项目,过往我们采用多个单页面来隔离各个模块,现希望只使用一个单页面包含所有模块
  • 打包
    • 采用多个单页面是为了加快打包速度,使各个模块的发布互不影响。如何解决模块打包速度问题,热打包能否胜任?
    • 采用多个单页面时,公共组件改动必须对所有模块进行重新打包。在单页面应用中如何避免公共组件的修改导致所有模块重新打包?
      • @vue/cli创建的项目在打包时各个chunk之间是相互独立的,但是都共同会影响到app.js这个文件。即,一个文件改变只会影响到同步引用该文件的模块,不会影响到异步引用的。
    • 如何实现同一库不同版本的共存
  • 多语言
    • 在只有几种语言的项目中,把语言内嵌各个组件中比较方便代码管理
    • 在需要多种语言时,为了压缩语言包体积,采用按需加载。同时为了方便管理散落在各个模块内的语言文件,还需要实现自动构建。
    • 更复杂的情况是按用户当前模块、倾向语言需要进行加载,但是这需要权衡多次请求的开销和语言包大小开销。
    • 最好的方式是实现服务端渲染
  • 路由
    • 如何管理多个框架共存的路由
  • 状态
    • 如何实现sessionStorage和状态的同步
    • 如何跨框架共享状态

目录结构

- assets 静态文件目录
- components 全局公共组件
    - langs 全局公共组件多语言
        - zh.json 
        - other.json
    - component.vue 公共组件代码
    - other.vue
- fun 全局公共函数
    - buildLang.js 构建i18n messages对象的函数
    - other.js
- langs
    - zh.js 搜集散落在模块中的zh语言包,每种语言需要一个文件
    - other.js
- modules
    - one 大功能模块
        - components 大功能模块中的公共组件
        - fun 大功能模块中的函数
        - views 大功能模块中的各个功能点
            - about 功能点about
                - lang 功能点i18n
                    - zh.json
                    - other.json
                - About.vue 功能点的代码
                - Other.vue
                - routes.js 功能点的路由
            - home 功能点home
                - 同about
        - moduleRoutes.js 功能块路由
        - store.js 功能块状态,待商榷
    - other 其他大功能块
        - 同one
- App.vue
- i18n.js 按需加载多语言
- main.js
- router.js 收集功能块路由生成根路由
- store.js 根状态,待商榷

猜你喜欢

转载自www.cnblogs.com/qq3279338858/p/12508756.html