从0到1教你构建企业自用的图标库

零 Vue.js教程评论91字数 1404阅读4分40秒阅读模式

从0到1教你构建企业自用的图标库

前言

最近 varlet 开源了自己的图标解决方案,刚好公司也遇到了一些图标相关的问题,记录下我的一些见解和收获。

问题

首先先列一下我遇到了什么问题:文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

  • 图标分散,不便于统一管理
  • 项目中使用图标混乱,全靠口口相传,命名和流程不规范
  • 可复用度低,维护成本高,开发体验差
  • ......

解决思路

图标预览

目前 varlet 做了一个用于预览图标的仓库, varletjs.github.io/varlet-icon…文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

image.png文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

这里列出来的图标是 varlet 的内置图标。文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

现状是,并没有一个地方收集所有的图标,图标都在蓝湖的设计稿上。内容少的时候还好,多的话,管理成本和使用成本都会上涨。文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

所以需要有个地方展示所有图标,做需求的时候,有需要就可以来这里查找并使用。设计师也可以在这里做图标管理,比如,删除图标,替换图标或者新增图标。文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

如果有需求做定制,可以拿这个仓库自己改下或者参照这个仓库再做一个。文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

工程化

考虑到每次迭代都可能有新的图标进来,如果手动去维护每个图标的话,不仅成本高,还容易出错。 将打包出来的组件作为一个包发到公司的私服上,这样相关项目直接更新依赖,按需使用就可以了。文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

image.png文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

如果需要类型提示,也要携带这个文章源自灵鲨社区-https://www.0s52.com/bcjc/vue-jsjc/16340.html

image.png

支持框架

有些开发者所在的公司,不同的部门可能使用了不同的前端框架,比如 Vue3 和 Reactvarlet-icon-builder 提供了一个配置项 framework,可根据需要生成对应的组件。

image.png

image.png

image.png

组件

实际开发时,是有图标复用的需求的,比如在A页面,有一个绘画的图标,尺寸是40x40,在B页面,设计的尺寸是50x50,项目为每个尺寸都引入一个图标的成本是很高的,维护起来也有心智负担。

考虑到这些,varlet-icon-builder提供了生成组件的能力,

shell

复制代码
pnpm run icons:generate

image.png

为了便于定制化,额外生成了一个 XIcon 的组件,可以借助这个组件,定制图标的宽高和颜色(还可以通过 wrapperComponentName 自定义名称)

image.png

js

复制代码
  <template>
    <i :style="style">
      <slot />
    </i>
  </template>
  
  <script lang="ts">
  import { defineComponent, computed } from 'vue'
  
  export default defineComponent({
    name: 'XIcon',
    props: {
      size: {
        type: [String, Number],
        default: '1em',
      },
      color: {
        type: String,
        default: 'currentColor',
      }
    },
    setup(props) {
      const style = computed(() => ({
        display: 'inline-flex',
        color: props.color,
        '--x-icon-size': typeof props.size === 'number' ? `${props.size}px` : props.size,
      }))
  
      return {
        style
      }
    }
  })
  </script>

字体文件

varlet-icon-builder 提供了生成字体文件的能力,对于公司的flutter项目,就可以直接引入 ttf 和 css 文件,参考 Flutter中使用iconfont

shell

复制代码
pnpm run icons:build

image.png

其中 index.js 里面包含 unicode

image.png

零
  • 转载请务必保留本文链接:https://www.0s52.com/bcjc/vue-jsjc/16340.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享

发表评论