美文网首页
微前端架构之使用manifest.json优化子应用加载

微前端架构之使用manifest.json优化子应用加载

作者: 叶小七的真命天子 | 来源:发表于2022-11-23 12:34 被阅读0次

一、前言

qiankun提供的entry方式有url方式也有对象方式。

  • 当entry是url方式时,其会使用import-html-entry库对url进行fetch,然后使用正则获取到html中的script标签和style标签,
  • 当entry为对象时,直接传入:scripts数组和styles数组,其不就不调用import-html-entry中的fetch和正则获取对应的js和css了,故此会加快子应用的加载。

需要注意的是,如果自己传入scripts,则不能使用内联script脚本,因为manifest中是获取不到内联的script脚本的,反之,使用html-entry可以获取到。

那么我们自己如何将子应用的style资源和js资源传给qiankun呢?

二、问题解决

1、使用webpack-manifest-plugin插件,在webpack构建过程中,生成对应的manifest数据,并生成entry-manifest.json文件。

代码实现:webpack.config.js

const { WebpackManifestPlugin } = require('webpack-manifest-plugin');
const publicPath =  IS_PROD ? `https://xxx.cdn.com/${projectName}/${new Date().getFullYear()}` : '/'
module.exports = {
  plugins: [
     new WebpackManifestPlugin({
        fileName: 'entry-manifest.json',
        generate: (seed, files, entrypoints) => {
          const manifestFiles = files.reduce((manifest, file) => {
            manifest[file.name] = file.path;
            return manifest;
          }, seed);

          const entrypointFiles = entrypoints.main
            .filter(fileName => !fileName.endsWith('.map') && !fileName.endsWith('.hot-update.js')) //修复热更新bug
            .map(item => `${publicPath}${item}`);

          const scripts = entrypointFiles.filter(item => item.endsWith('.js'));
          const styles = entrypointFiles.filter(item => item.endsWith('.css'));

          return {
            files: manifestFiles,
            entrypoints: entrypointFiles,
            scripts,
            styles,
          };
        },
      }),
  ]
}

2、基座项目并且请求获取每个子应用的entry-manifest.json文件内容获取对应对js和css数据,传给qiankun。

Promise.allSettled(microAppList.map(item=>fetch(item+'entry-manifets.json'))).then(()=>{
  ....
})

后期项目代码上传cdn的时候,使用就更绝了。

相关文章

  • 微前端架构之使用manifest.json优化子应用加载

    一、前言 qiankun提供的entry方式有url方式也有对象方式。 当entry是url方式时,其会使用imp...

  • 基于qiankun的微前端最佳实践-通信篇(Vuex)

    大家好~~ 在开始介绍 qiankun 的应用通信之前,我们需要先了解微前端架构如何划分子应用。 在微前端架构中,...

  • 微前端的概念

    ## 微前端的概念 微前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。 微前端的核...

  • 微前端——qiankun(乾坤)实例

    一、什么是微前端 微前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。微前端的核心在...

  • JS沙箱机制

    一.思考 微前端应用加载 刚开始我加载A应用 window.a B应用 window.a 怎样可以俩个应用里的...

  • 【前端】架构设计

    一、微前端 微前端架构 应用自治 单一职责 技术栈无关 为什么需要微前端 遗留系统迁移 后端解耦,前端聚合 热闹驱...

  • qiankun 微前端应用实践与部署(三)

    微前端架构下,主应用有自己的路由模块,同时主应用支持以微前端的方式嵌入业务模块(子应用),如何实现呢? 关于路由 ...

  • 基于qiankun 微应用--应用间通信

    在微前端架构中,我们应该按业务划分出对应的子应用,而不是通过功能模块划分子应用。这么做的原因有两个: 在微前端架构...

  • 微前端——概述(一)

    微前端是什么? 微前端架构是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体...

  • 微前端架构

    微前端架构实际验证可实现:主子应用架构拆分,子应用不限定框架,可以是vue也可以是react,原生js应用; 可...

网友评论

      本文标题:微前端架构之使用manifest.json优化子应用加载

      本文链接:https://www.haomeiwen.com/subject/kgknxdtx.html