解决微前端qiankun中子应用打包后主应用访问不到其icon图标的问题

问题:

使用qiankun微前端库的时候,加载的子应用使用了element-ui的字体图标,子应用在独立运行时,字体图标可以正常显示,而在被父应用加载时,字体图标显示不出来。

 Chrome的console中出现如下警告:

Failed to decode downloaded font: https://anyshare.aishu.cn/anyshare/static/fonts/element-icons.535877f5.woff
5E9B63FCAF2D440291A55D4DC0887B2C#/:1 OTS parsing error: invalid sfntVersion: 1008821359

解决方案:

1、所有图片等静态资源上传至 cdn,css 中直接引用 cdn 地址(推荐);

2、借助 webpack 的 url-loader 将字体文件和图片打包成 base64(适用于字体文件和图片体积小的项目)(推荐)

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpe?g|gif|webp|woff2?|eot|ttf|otf)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {},
          },
        ],
      },
    ],
  },
};

3、打包时vue.config.js中加入配置(如下),其作用是将 font文件 编译成 base64 内嵌到css文件 @font-face{font-family:element-icons;src:url(data:font/woff;base64,d09GRgABAAAAAG4oAAsAAAAA:

module.exports = {
    chainWebpack: config => {
        config.module
      .rule("fonts")
      .test(/.(ttf|otf|eot|woff|woff2)$/)
      .use("url-loader")
      .loader("url-loader")
      .tap((options) => {
        options = {
          // limit: 10000,
          name: "/static/fonts/[name].[ext]",
        };
        return options;
      });
    }
};

原因:

qiankun 将外链样式改成了内联样式,但是字体文件和背景图片的加载路径是相对路径。

而 css 文件一旦打包完成,就无法通过动态修改 publicPath 来修正其中的字体文件和背景图片的路径。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值