在微前端中,antd icon createFormIconfontCN 的本地化问题

首发于 语雀文档

<a name="tCbT2"></a>

前言

用过 antd icon 的朋友们可能知道,对于 createFormIconfontCN,其中介绍的用法是:

https://ant.design/components/icon-cn/#components-icon-demo-iconfont

使用的是外链的方式

1import { createFromIconfontCN } from '@ant-design/icons'; 2 3const IconFont = createFromIconfontCN({ 4 scriptUrl: '//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js', 5}); 6 7ReactDOM.render( 8 <div className="icons-list"> 9 <IconFont type="icon-tuichu" /> 10 <IconFont type="icon-facebook" /> 11 <IconFont type="icon-twitter" /> 12 </div>, 13 mountNode, 14);

<a name="XXLpa"></a>

对于内网开发者

对于内网开发者,无法连接外网,因此也就无法使用外链。<br />而如果我们使用 public 静态化的方式,能较好地解决图标资源本地化的问题。<br />我一开始也是使用此方法。

第一步:将需要的字体脚本放入 public 目录下 第二步:在 createFromIconfontCN 的 scriptUrl 中写入字体脚本的相对路径字符串

1import { createFromIconfontCN } from '@ant-design/icons'; 2 3const IconFont = createFromIconfontCN({ 4 scriptUrl: './font_8d5l8fzk5b87iudi.js', 5}); 6 7ReactDOM.render( 8 <div className="icons-list"> 9 <IconFont type="icon-tuichu" /> 10 <IconFont type="icon-facebook" /> 11 <IconFont type="icon-twitter" /> 12 </div>, 13 mountNode, 14);

<a name="EjpKQ"></a>

对于微前端应用开发者

但对于微前端应用开发者(比如说我们), public 静态化的方式,仍无法满足我们解决图标资源本地化的问题。因为子应用一旦嵌入基座,由于浏览器中的 IP 域名就不再是子应用的 IP 域名,若请求未明确指定 IP 域名的情况下,请求会默认取浏览器中的 IP 域名(虽然大多是 umi+qiankun,会帮我处理绝大多数请求,让请求仍指向子应用的静态资源服务),如图:<br />image.png

font 的正确路径应该是:http://子应用IP:子应用端口/font.js, 但由于子应用在基座(即:主应用)中运行,此时使用的是相对路径,可以发现发出的资源请求 URL 变成了:http://主应用IP:主应用端口/font.js,这明显不对,报了 404 错误。

<a name="Z5DPK"></a>

我的解决方案

说实话,这并不难理解,只是当时一下子没想到,害我自己还去写了根据应用名获取对应应用地址,将其与图标资源文件进行路径拼接的逻辑方法。😂😂😂

我在网上搜了不少,只找到官方的外链方式,和 public 静态化的方式来解决图标资源本地化,但没看到有如下的解决方式。<br />在我看来,在没有更多时间去研究 umi 配置的情况下去解决图标资源本地化,这是最快的解决方案。

iconfont 的字体脚本本质还是 js 脚本,那便可以直接 require

1const IconFont = Icon.createFromIconfontCN({ 2 scriptUrl: require('../assets/js/font_8d5l8fzk.js'), 3});

<br />当然,还有一种办法,那就是:内网 / 外网的 CDN / OSS

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )