记qiankun踩坑之路

221 阅读2分钟

背景

由于公司业务的发展导致项目工程越来越大, 故决定对项目进行业务功能划分, 将大项目拆分成几个小项目, 再整合到一起。由此想到了微前端的架构,参考了市面上的几大框架之后,最终决定使用qiankun对项目进行改造。

配置

根据API上的指南进行调整后,发现启动的时候会报错,百度上也没啥小伙伴遇到跟我一样的问题,故非常疑惑。最终在小伙伴的帮助下,终于找到了问题点。记录下来以备后续参考。

  • 因为用的都是同一套组件库, 同一套UI, 故没有使用沙箱功能
  • 路由均采用hash模式

问题列表

问题一: 运行异常

package.json中的name不是唯一导致, package.json 的 name 保持跟主应用注册子应用的时候 name 一致, 不能是包含关系, 比如: aa 和 aab 这种是不可以的, 可以是 ab, ac

23da444ba818d94aa2ecf3f817dd9cf.png

328908886a17cf8edb2bb4e4c374c6f.png

问题二: 数据通信

主应用传入store给子应用, 获取store中某个值的时候, 会发现有延时, 在下次变更的时候取的是上一次的值, 目前采用解决方法是使用 qiankun 的 actions 进行传值

配置参考: blog.csdn.net/wanghe1111_…

问题三: fonts文件/图片丢失

在 vue.config.js 中的 chainWebpack 增加文件打包处理

// 文件处理 -- 微应用打包之后 css 中的字体文件和图片加载 404
const filePath = process.env.NODE_ENV === 'production' ? '服务器地址' : '../';
config.module
  .rule('fonts')
  .use('url-loader')
  .loader('url-loader')
  .options({
    limit: 4096, // 小于4kb将会被打包成 base64
    fallback: {
      loader: 'file-loader',
      options: {
        name: 'fonts/[name].[hash:8].[ext]',
        publicPath: filePath,
      },
    },
  })
  .end();
config.module
  .rule('images')
  .use('url-loader')
  .loader('url-loader')
  .options({
    limit: 4096, // 小于4kb将会被打包成 base64
    fallback: {
      loader: 'file-loader',
      options: {
        name: 'img/[name].[hash:8].[ext]',
        publicPath: filePath,
      },
    },
  });