hel-micro,modulefederationsdk,build-free,hotupdate,toolchain-independentmicro-modulesolution,欢迎关注和了解hel的使用-micro在制作远程react图形组件库micro模块联合技术sdk解决方案是基于react组件模板创建远程antd库(hel-antd)和远程tdesign-react库(hel-tdesign-react)。hel-antd和hel-tdesign-react的制作过程是完全一样的,唯一的区别就是安装的库不同。可以参考这篇文章制作其他优秀的react图形组件库作为对应的远程库。以下步骤用于制作hel-antd-based。传统的react图形组件库导入方式在多个项目升级时非常麻烦:hel-micro升级为远程库后,被其他项目使用时,实际运行逻辑不参与项目打包,用户可以实现无感知动态升级(顺便说一句,也减少了项目的包大小,提高了编译速度),以antd为例,如果你有5个项目使用antd2.您需要为所有5个项目安装最新的antd版本并重新部署它们。如果是引用的hel-antd,只需要在2.21版本的基础上重新发布hel-antd,用户就可以运行最新版的antd了。基于代理对象技术,用户可以像使用本地antd一样使用远程antd和远程tdesign-react,参见在线示例:使用hel-antd,使用hel-tdesign-react克隆react模板库clonethereacttemplatelibrary,并保存为hel-antd目录,接下来我们将修改gitclonehttps://github.com/hel-eco/hel-tpl-remote-react-comp-ts.githel-antd修改模块根据该目录下的文件将package.json中模块的名称改为hel-antd"name":"hel-tpl-remote-react-comps-ts","appGroupName":"hel-tpl-remote-react-comps-ts","name":"hel-antd","appGroupName":"hel-antd",修改项目中src/configs/subApp.ts的LIB_NAME为hel-antd(如果不修改,构建时会报模块名称不一致错误)exportconstLIB_NAME='hel-tpl-remote-react-comps-ts';exportconstLIB_NAME='hel-antd';>可以修改成你想要的名字,这里只是以安装antd为例这里我们是基于的4.23.4版本antd构建远程antd库npmiantd@4.23.4导出antd模块导出antd模块主要包括2部分,导出运行时代码用于webpack打包,方便hel-micro动态拉取构建好的运行时代码导出proxy对象用于rollup打包,方便用户安装远程模块类型文件,使用import在文件头静态导入远程模块。运行时导出代码的时候,我们先把我们要暴露的远程组件导出到src/components下-importHelloRemoteReactCompfrom'./HelloRemoteReactComp';-export{-HelloRemoteReactComp,-}+import*asantdfrom'antd';+导出{默认为TestExport}来自'./TestExport';+exportdefaultantd;请注意,这里额外导出了一个TestExport组件,以演示您可以扩展原始antd库并添加您自己的新组件functionTestExport(){returnTestExportComponent};TestExport.displayName='TestExport';导出默认测试导出;然后在src/entrance/libProperties.ts中合并导出模块(这个合并逻辑也可以在src/components中处理),同时暴露导出的模块类型对象——importcompsfrom'components';——exporttypeLibProperties=typeofcomps;-exportdefaultcomps;+importantd,{TestExport}from'components';+consttoExport={...antd,TestExport};+exporttypeLibProperties=typeoftoExport;+exportdefaulttoExport;proxyobjectexportsrc/entrance/libTypes.ts文件内容表示导出代理对象,对象实际内容由用户hel-micro模块的preFetchLib函数填充。如果不修改以下行,则不会Problemimporttype{LibProperties}from'./libProperties';import{exposeLib}from'hel-lib-proxy';import{LIB_NAME}from'configs/subApp';exportconstlib=exposeLib
