• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

微前端qiankun的依赖import-html-entry的作用

武飞扬头像
Lvan的前端笔记
帮助1

背景

import-html-entry 这个库是微前端框架 qiankun 的一个重要的依赖库,其功能是主应用拉取子应用并渲染出来,那么抱着好奇的心态,我今天来扒一扒其中的原理。

在说之前呢,我们先来说一说一个前端应用为什么能运行起来,靠的就是 html、css、js 这三个东西,如今的 React、Vue 等 SPA 应用最终打包出来的也是这三个东西,只不过 html 中的内容少了,js 中的内容多了,如下:

<!DOCTYPE html>
<html lang=en>

<head>
  <meta charset=utf-8>
  <meta http-equiv=X-UA-Compatible content="IE=edge">
  <meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover">
  <link href=//xxx.com/repository/project-name/dist/css/chunk-vendors.406a56ae.css
    rel=stylesheet>
  <link href=//xxx.com/repository/project-name/dist/css/app.f083b18d.css
    rel=stylesheet>
</head>

<body>
  <div id=app></div>
  <script src=//xxx.com/repository/project-name/dist/js/chunk-vendors.f00734a5.js></script>
  <script src=//xxx.com/repository/project-name/dist/js/app.83d6a4c7.js></script> 
</body>
</html>

学新通

甚至说,我们把 css、js 内嵌到 html 中,那么一个 html 文件就可以让我们运行起来这个应用。

其实 import-html-entry 做的就是把如上代码中的 js、css 通过 fetch 拉取出源代码并内嵌到这个 html 中,变为一个包含内嵌 js、css 源码的 html 文件。

源码解析过程

以这个地址为例:http://xxx.com,这个地址指向的前端 html 文件代码如下:

<!DOCTYPE html>
<html lang=en>

<head>
  <meta charset=utf-8>
  <meta http-equiv=X-UA-Compatible content="IE=edge">
  <meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover">
  <link href=//xxx.com/repository/project-name/dist/css/chunk-vendors.406a56ae.css
    rel=stylesheet>
  <link href=//xxx.com/repository/project-name/dist/css/app.f083b18d.css
    rel=stylesheet>
    <style> h1 { font-size: 40px; } </style>
</head>

<body>
  <div id=app></div>
  <script src=//xxx.com/repository/project-name/dist/js/chunk-vendors.f00734a5.js></script>
  <script src=//xxx.com/repository/project-name/dist/js/app.83d6a4c7.js></script> 
  <script>console.log('这是内联script');</script>
</body>
</html>
学新通

1、通过 fetch 获取到 url 对应的全部内容,也就是这些代码字符串
2、从1中的字符串中解析出三部分内容(主要通过正则解析):
2.1 经过初步处理后的 html(去掉外链css、去掉外链js)
2.2 script 数组,如 ['//xxx.com/repository/project-name/dist/js/chunk-vendors.f00734a5.js', '//xxx.com/repository/project-name/dist/js/app.83d6a4c7.js', ]
2.3 style 数组,如 ['xxx.com/repository/project-name/dist/css/chunk-vendors.406a56ae.css', '//xxx.com/repository/project-name/dist/css/app.f083b18d.css']
3、fetch 对应的 js、css,内联到第 1 步获取到的 html 中

以上只是个大概的流程,比较细致具体的可以看参考资料中的文章。

总结

在微前端 qiankun 中,使用 import-html-entry 获取到子应用也就是某个 url 对应的 html 文件,并且这个 html 已经嵌入好了 js、css,同时还可以直接执行子应用的所有 js 脚本且此脚本还为 js 隔离(避免污染全局)做了预处理。

参考资料

https://blog.csdn.net/qq_41800366/article/details/122093720

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfaagj
系列文章
更多 icon
同类精品
更多 icon
继续加载