解决qiankun框架子应用打包后css里的图片加载404失败问题

详细实现方式请前往https://www.passerma.com/article/93

官网解决办法

  1. 所有图片等静态资源上传至 cdn,css 中直接引用 cdn 地址(推荐)
  2. 借助 webpack 的 url-loader 将字体文件和图片打包成 base64(适用于字体文件和图片体积小的项目)(推荐)

官网解决办法跳转:微应用打包之后 css 中的字体文件和图片加载 404

第三种方法

可以通过重写 qinakun 的 fetch 方法直接修改请求到的 css 文件里的资源路径

javascript 复制代码
function rewriteCssUrls(cssContent: string, baseUrl: string) {
  return cssContent.replace(
    /url\((?:'|")?(.*?)['"]?\)/g,
    (match, p1) => {
      const url = p1.trim();

      // 已经是 base64 / http(s) / protocol-relative,不处理
      if (/^(?:data:|https?:\/\/|\/\/)/i.test(url)) {
        return match;
      }

      const urlObj = new URL(url, baseUrl);

      return `url(${urlObj.href})`;
    }
  );
}

registerMicroApps([
  {
    name: 'sub1',
    entry: 'http://127.0.0.1:5500/dist/',
    container: '#sub1',
    activeRule: () => true,
  }
]);

start({
  fetch: (url, opt) => {
    return fetch(url, opt).then(async response => {
      let responseText = await response.text();
      const urlObj = new URL(url.toString());
      if (urlObj.pathname.endsWith('.css')) {
        responseText = rewriteCssUrls(responseText, urlObj.href.split('/').slice(0, -1).join('/') + '/');
      }
      return new Response(responseText, {
        status: response.status,
        statusText: response.statusText,
        headers: response.headers,
      });
    });
  }
});

可以看到实际加载的文件已经是正确目录了

原始 css 文件是相对路径

修改过后实际引入的是相对于子应用的路径了

详细实现方式请前往https://www.passerma.com/article/93

相关推荐
FreeTinker4 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396234 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
wangruofeng5 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne5 小时前
WebRTC Native / Android 开发学习资源整理
前端
excel6 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..7 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
软件聚导航7 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
恋猫de小郭8 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
yma168 小时前
通过提示词实现GitHub Pages 和 Nginx 双部署竟然这么简单?
前端
前端 贾公子8 小时前
第09章:上下文与记忆 (2)
java·服务器·前端