文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Iconfont不能上传怎么维护Icon

2023-07-02 17:07

关注

本文小编为大家详细介绍“Iconfont不能上传怎么维护Icon”,内容详细,步骤清晰,细节处理妥当,希望这篇“Iconfont不能上传怎么维护Icon”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

引言

使用 iconfont 有很多优势,比如只需要加载一次,全部图标都可以设置字号大小,颜色、透明度等,可以随意变换字体的形态,并且图标是矢量的,不会随着字体大小的变化失真,得益于 iconfont.cn 提供的便利,大多情况下,我们不必上传自己的图标,只需要便捷的搜索,就可以将图标加入到自己的项目图标库中,但最近工作中却遇到了比较严重的问题。

现在做的事情

我所在公司目前正在建设低代码平台,这个低代码平台可以说是无代码,需要从原先的各个应用中抽取部分页面和组件成为低代码组件,这样低代码平台就可以通过拖拽组件,形成一个有个性化的业务场景。如果 A 应用中的 A 组件需要更新,那么低代码中的组件也需要同步更新,所以说组件并不是单独的一个 npm 包,而是类似于 webpack5 模块联邦(Module Federation)打包出来的 remote(远程)组件。

遇到的问题

问题一:命名冲突

Iconfont不能上传怎么维护Icon

原先都是一个个独立的应用,都是可以独立部署独立运行,现在需要将这些应用组合在一起,形成一个新的应用,就遇到这个关于图标的问题。

由于原先各个应用都是独立部署,所以项目中就直接引用了 iconfont 中的字体,命名也都叫 iconfont,一旦将这些组件组合到一起,命名冲突之外,字体中的 unicode 也会冲突。

问题二:icon 图标库没交接

由于 icon 图标库都是各个应用的前端开发者维护的,他们都在自己的用户名下建立项目, iconfont 图标库在 git 仓库之外,在人员变动的情况下,图标库的权限往往会忘记交接。

问题三: iconfont 维护

Iconfont不能上传怎么维护Icon

正巧遇到 iconfont 维护,到目前为止虽然可以使用,但是想要上传新的图标还是不行。

如何解决?

问题一:全局替换

最简单的方式是各个应用全局替换加前缀。

- <span class="iconfont icon-xxx"></span>+ <span class="appAiconfont appAicon-xxx"></span>

这样做当然没问题,但是到低代码平台那边就会加载 n 个字体文件,并且都是包含整个应用的字体,这就失去了使用 iconfont 的优势。

问题二:要回权限

虽然我们可以要回离职人员 iconfont 中项目的权限,短期可以解决项目上图标使用的问题,但是这个问题还是会有存在的可能。

问题三:力所不及

iconfont 目前也遇到了较大的问题,到目前为止还无法上传文件,对于我们这些 iconfont 的使用者来说只有等待。

最终方案:使用 svg 代替 iconfont

使用 svg 的优势

目前流行的组件库已经都使用了 svg 代理字体图标,比如 ant-design、Material-UI 等

将引用的 iconfont 转变为本地 svg

我们可以手动一个一个从 iconfont 图标库中下载 svg,但这样做未免有些过于麻烦。

Iconfont不能上传怎么维护Icon

在 iconfont 字体样式中,css 包含了这样一个路径,或者我们可以在项目 css 中直接找到这段代码,然后下载这个 svg。 打开 svg 会看到如下代码

Iconfont不能上传怎么维护Icon

一个 glyph 元素定义了 SVG 字体中的一个独立的字形,所以我们可以通过一个 node 脚本将这里面的独立字形转变 svg

直接上代码

const cheerio= require("cheerio")const fs= require("fs")const path= require("path")fs.readFile(path.join(__dirname,'./iconfont.svg'), 'utf8', function(err, data) {    if (err) throw err;    //console.log(data)        const $=cheerio.load(data)        $('glyph').each((index,item)=>{            const svgStr=`<svg  fill="currentColor" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="128" height="128">    <path d="${item.attribs.d}"></path></svg>`        fs.writeFile(path.join(__dirname,`./svg/${item.attribs['glyph-name']}.svg`),svgStr,(err,data)=>{            if (err) throw err;        })    });});

cheerio 是一个 nodejs 下类似 jquery api, 主要是利用 cheerio 将字符串中的 d glyph-name 写到一个 svg 文件中。 iconfont 中的字体图标大家都是 1024 所以,设置viewBox="0 0 1024 1024"

看下效果

Iconfont不能上传怎么维护Icon

这下,可以不用问离职人员要 iconfont 权限了。

svg 转为 React Component

在 webpack 中我们可以使用一个 叫 svgr 的 loader,它可以将 SVG 转换为一个随时可用的 React 组件。

首先使用 npm 安装 @svgr/webpack

npm install @svgr/webpack --save-dev

然后在 webpack.config.js 中加入配置

const webpack = require('webpack');module.exports = {  entry: './src/index.js',  module: {    rules: [      {        test: /\.(js|jsx)$/,        exclude: /node_modules/,        use: ['babel-loader'],      },      {        test: /\.svg$/i,        type: 'asset',        resourceQuery: /url/, // *.svg?url      },      {        test: /\.svg$/i,        issuer: /\.[jt]sx?$/,        resourceQuery: { not: [/url/] }, // exclude react component if *.svg?url        use: ['@svgr/webpack'],      },    ],  },}

使用方式

import svg from './assets/file.svg?url'import Svg from './assets/file.svg'const App = () => {  return (    <div>      <img src={svg} width="200" height="200" />      <Svg width="200" height="200" viewBox="0 0 3500 3500" />    </div>  )}

通过使用 ?url 区分是否使用 url 的方式引用。

svgr 官网可以的 palayround 可以实时预览转换后的代码

Iconfont不能上传怎么维护Icon

我们只需要启动应用程序,Webpack 就会自动完成转换任务,再不需要再担心 SVG 了。你可以将 SVG 文件放在 src/文件夹中的任何位置,并将它们作为 React 组件导入使用。

读到这里,这篇“Iconfont不能上传怎么维护Icon”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯