EMP v2.5三级共享深度定制对ESM 的支持

news2024/9/25 11:22:12

版本背景

  • 1 Module Federation 共享逻辑CDN复用性不高
  • 2 ESM兼容性日益成熟,性能表现越来越好
  • 3 市面上针对 ESM 的模块共享实现不完善
  • 4 开发、正式环境结合共享的开发体验不佳

ESM 概念

ESM - ES modules 是 JavaScript 官方的标准化模块系统。相比于 CommonJS 和 AMD 等模块规范,最新浏览器原生支持模块功能,不再需要额外打包处理 或者 少部分的处理

EMP 三级共享

三级共享出发初衷是为了结局MF共享逻辑的CDN复用不高的问题,v2.5 之前 共享逻辑

  • 三级共享,在共享基础上下沉公共基础库,
  • 减少构建时间、项目体积,提升访问速度、CDN命中率,是一套更加高性能的共享方案
  • 超前布局方面 同时支持UMD 与 ESM下一代模块系统 具备启动速度快、编译成本低、共享逻辑更直观的特点

EMP ESM三级共享新模型

v2.5 之后 针对开发环境引入ImportMap 适配多环境,多版本支持

案例

  • 基站
  • 通过 emp build -t 生成产物与 d.tsdist
  • micro-host/emp-config.js
const {defineConfig} = require('@efox/emp')
const {cdn, esm} = require('./cdn')
const reactVersion = '17.0.2'
const esmVersion = 'es2018'
module.exports = defineConfig(({mode}) => {const target = esmVersionreturn {build: {target,},server: {port: 8001,},empShare: {name: 'microHost',exposes: { // Expose 共享模块'./App': './src/App','./incStore': './src/store/incStore',},shareLib: { // 通过约束请求 ESM模块react: esm('react', mode, reactVersion, esmVersion),'react-dom': esm('react-dom', mode, reactVersion, esmVersion),zustand: esm('zustand', mode, '4', esmVersion, `react@${reactVersion},react-dom@${reactVersion}`),},},html: {title: 'Micro-Host'},}
}) 
  • 应用
  • 当基站在正式环境中时 emp start,应用可以执行 emp dts通过需要的类型依赖
  • micro-app/emp-config.js
const {defineConfig} = require('@efox/emp')
const {cdn, esm} = require('./cdn')
const reactVersion = '17.0.2'
const esmVersion = 'es2018'
module.exports = defineConfig(({mode, env}) => {const target = esmVersionreturn {build: {target,},server: {port: 8002,},empShare: {name: 'microApp',remotes: { // 应用 共享模块'@microHost': `microHost@http://localhost:8001/emp.js`,},exposes: {'./App': './src/App',},shareLib: { // 通过约束请求 ESM模块react: esm('react', mode, reactVersion, esmVersion),'react-dom': esm('react-dom', mode, reactVersion, esmVersion),zustand: esm('zustand', mode, '4', esmVersion, `react@${reactVersion},react-dom@${reactVersion}`),},},html: {title: 'Micro-App'},}
}) 
  • 完成上面操作即可实现共享开发,同时当 基站是 dev环境 或者 prod环境都不影响 应用的开发

总结

经过以上改造,我们可以得到一个 ESM 完全独立于基站的应用开发环境,不需针对开发另外启动一个新环境做适配,更好的提升开发体验

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql知识点总结(网安必备)

目录 数据库介绍 数据库基本概念 数据库类型 MySql数据库管理系统 SQL语言 概述 常见操作 表的完整性约束 非外键约束 外键约束 单表查询 函数 多表查询 事务 事务隔离级别 视图 数据库介绍 数据库基本概念 数据:所谓数据(Data&#xf…

什么是融合通信?

近年来融合通信概念被广泛提起,那么,什么是融合通信?融合通信可以融合哪些设备或者系统呢? 近代通信技术得益于电话网的出现,人们通过电话实现了跨越式的通信。随着计算机和互联网的出现,人们可以利用互联网…

谷粒学院——十三章、登录与注册

用户登陆业务介绍 单一服务器模式 早期单一服务器,用户认证。 缺点:单点性能压力,无法扩展。 SSO 模式(单点登陆) 分布式,SSO(single sign on)模式,也叫单点登陆模式。 优点: 用户身份信…

【C++高阶数据结构】图

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

代码随想录拓展day7 649. Dota2 参议院;1221. 分割平衡字符串;5.最长回文子串;132. 分割回文串 II;673.最长递增子序列的个数

代码随想录拓展day7 649. Dota2 参议院;1221. 分割平衡字符串;5.最长回文子串;132. 分割回文串 II;673.最长递增子序列的个数 贪心和动态规划的题目。因为贪心其实没什么规律,所以就简要记录了。 649. Dota2 参议院 …

数据可视化系列-04数据大屏基础知识

文章目录5.销售数据看板5.1 了解数据大屏基础知识1.数据大屏简介:2.数据大屏使用场景3.数据大屏分类5.2 数据大屏的设计:1.大屏前端设计流程2.数据大屏设计尺寸解析3.可视化视觉设计5.3 大屏开发工具DataV:1.DataV数据可视化简介2.优势3.Data…

植物大战僵尸:遍历向日葵的生产速度

找到向日葵的吐出阳光的速度,向日葵生产阳光是一个周期性的,所以其内部是有一个计时器控制的,我们只要找到这个计时器并改写它的定时时间即可完成无限吐阳光的作用 向日葵的遍历技巧: 首先种下一个向日葵 -> 然后CE马上搜索->未知初始化回到游戏->然后在…

关于单相智能多用户远程预付费控系统的优化设计研究

摘要:由于现有系统仅对电表数据进行读取操作,存在成本较高和耗时较长的问题,为此对单相智能多用户远程预付费控系统优化设计进行研究。选择电能表子系统作为优化对象,选取78KO527A微控制器作为电能表子系统的控制核心,…

Java 并发编程 (三)Phaser

#Phaser 功能介绍 CyclicBarrier 解决了 CountDownLatch的缺点,但是其本身也仍然具备一定的缺陷,比如不可以动态添加parties 调用一次await 仅占用1个parties public class MyPhaser {private Phaser phaser new Phaser(3);public void testA(){System…

微信过期文件怎么找回?2个方法,轻松解决

现在很多小伙伴都喜欢使用微信发送文字、图片、语音、照片、文件等内容给对方。可是在其中,文件内容比较特殊。如果没有及时进行查看,过了一段时间就会变成过期文件,无法再进行查看了。微信过期文件怎么找回?今天小编分享2个简单好…

微型消防站一体化指挥作战解决方案

一、政策要求 近年政府对社区微型消防站提出了新的建设要求: 1、 大力发展多种形式消防队伍,逐步加强现役消防力量建设,发展政府专职消防队,企业事业单位专职消防队和志愿消防队。 2、 明确城市消防安全布局和公共消防设施的消…

vue 可视化表单设计器 自定义组件

有一款基于vue的可视化表单编辑器,直接双击或者拖拽组件,便可以创建一个表单,非常方便。今天为大家介绍这款编辑器: 官方地址:Variant Form - 可视化低代码表单 github地址:https://github.com/vform666/…

Redshift渲染器为什么这么受欢迎?

Redshift是用于高质量制作工作的渲染器 。它是很快的渲染引擎,并且可以很好地与许多第三方插件配合使用。在本文中,让我们深入了解Redshift的更多细节。什么是 Redshift 及其工作原理?Redshift 是一种有偏见的 GPU 渲染引擎,它支持…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的OCR模型

给我推荐20个比较流行的OCR模型 好的,以下是我为你推荐的 20 个比较流行的 OCR 模型。 Tesseract CuneiForm Ocrad GOCR OCRopus OCR-ICR Ocropy Ocrad.js Ocracoke Ocralysis Ocrinum Ocrmypdf Ocrsaurus Ocrdroid Ocr-textscan Ocrfeeder Ocrmypicture Ocrus Oc…

RHCE-chrony服务部署

目录 要求: 思路: 配置过程: a: 1.开启两台服务器,开启chrony服务。 2.部署chrony服务 查看chrony服务状态 b: 区别: 配置过程: 修改完配置后,重启chrony服务 查看chrony状态: 小结一…

element-ui 多选框和级联选择的部分bug以及解决方法

前言 最近在开发一款使用了 element-ui 的低代码设计器,在开发的过程当中碰到了一些关于 element-ui 组件本身不合理的地方,并且在百度的基础上自己去阅读了一下 element-ui 的源码,也找出了这些问题的一个解决方案,下面就来看一…

steam搬砖是什么?怎么做呀?

steam平台是什么?它是国外一个集全球大部分网游于一体的游戏平台,玩过绝地求生端游(吃鸡),csgo的朋友,对它都不陌生,就像国内的Wegame一样,现在玩英雄联盟的,都是通过Weg…

排序算法之冒泡算法

目录 排序算法介绍 冒泡排序 算法流程 算法实现 python C 排序算法介绍 《Hello算法》是GitHub上一个开源书籍,对新手友好,有大量的动态图,很适合算法初学者自主学习入门。而我则是正式学习算法,以这本书为参考&#xff0c…

返回数组所有元素中或每行(列)中,最小值的位置(位置号从0开始):argmin()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回数组所有元素中或每行(列)中 最小值的位置(位置号从0开始) argmin()函数 选择题 下列说法错误的是? import numpy as np a np.array([[10,20,30,40],[15,20,25…

Electron 企业级应用开发实战(二)

这一讲会重点介绍如何集成 Node.js、使用 preload 脚本、进程间双向通信、上下文隔离等,为大家揭开 Electron 更强大的能力。 集成 Node.js 企业级桌面应用的资源都是本地化的,离线也能使用,所以需要把 html、js、css 这些资源都打包进去&a…