解决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

相关推荐
凯瑟琳.奥古斯特25 分钟前
Bootstrap快速上手指南
开发语言·前端·css·bootstrap·html
精益数智工坊30 分钟前
拆解制造业仓库物料管理流程:如何通过标准化仓库物料管理流程解决账实不符难题
大数据·前端·数据库·人工智能·精益工程
恶猫34 分钟前
网页自动化模拟操作时,模拟真实按键触发事件【终级方案】
前端·javascript·自动化·vue·网页模拟
小羊Yveesss1 小时前
2026年前端开发新趋势:智能协同、工具革新与场景深耕
前端·ai
Dxy12393102161 小时前
HTML中的Canvas可以干哪些事情
前端·html
悟乙己1 小时前
解析 Agent 时代的 HTML PPT SKILLS: html-ppt-skill
前端·html·powerpoint
ZC跨境爬虫1 小时前
跟着 MDN 学 HTML day_2:(表单分组与高级输入控件实战)
前端·javascript·css·ui·html
ppandss12 小时前
JavaWeb从0到1-DAY4-AJAX
前端·ajax·okhttp
涵涵(互关)2 小时前
语法大全-only-writer-two
前端·vue.js·typescript
huangql5202 小时前
浏览器 Location API、History API、路由记录与支付跳转完全指南
前端