当前位置:   article > 正文

iconify图标集离线使用方案简介_@iconify

@iconify

1.需求描述

前端项目,技术栈使用Vue3+Element Plus,参考了ruoyi-vue-pro项目与vue-element-plus-admin项目,封装了一个Icon组件,图标使用的是iconify,项目部署在内网环境,不能连接互联网,需要部署一套iconify图标离线环境使用。Icon组件代码如下。

  1. <script lang="ts" setup>
  2. import { propTypes } from '@/utils/propTypes'
  3. import { useDesign } from '@/hooks/web/useDesign'
  4. import { Icon } from '@iconify/vue'
  5. defineOptions({ name: 'Icon' })
  6. const { getPrefixCls } = useDesign()
  7. const prefixCls = getPrefixCls('icon')
  8. const props = defineProps({
  9. // icon name
  10. icon: propTypes.string,
  11. // icon color
  12. color: propTypes.string,
  13. // icon size
  14. size: propTypes.number.def(16),
  15. // icon svg class
  16. svgClass: propTypes.string.def('')
  17. })
  18. const isLocal = computed(() => props.icon.startsWith('svg-icon:'))
  19. // const data = computed(() => {
  20. // return getIcon(props.icon)
  21. // })
  22. const symbolId = computed(() => {
  23. return unref(isLocal) ? `#icon-${props.icon.split('svg-icon:')[1]}` : props.icon
  24. })
  25. const getIconifyStyle = computed(() => {
  26. const { color, size } = props
  27. return {
  28. fontSize: `${size}px`,
  29. color
  30. }
  31. })
  32. const getSvgClass = computed(() => {
  33. const { svgClass } = props
  34. return `iconify ${svgClass}`
  35. })
  36. </script>
  37. <template>
  38. <ElIcon :class="prefixCls" :color="color" :size="size">
  39. <svg v-if="isLocal" :class="getSvgClass" aria-hidden="true">
  40. <use :xlink:href="symbolId" />
  41. </svg>
  42. <Icon v-else :icon="icon" :style="getIconifyStyle" />
  43. </ElIcon>
  44. </template>

2.方案设计

iconify有一个项目api,一个用Node.js写的http服务。

下载所有依赖后,把代码部署到内网服务器中,启动服务,利用Nginx做反向代理,暴露此服务,设置项目的iconify地址,使用离线服务。

3.项目iconify地址设置

此设置比较简单。

第一步安装依赖@iconify/vue

npm install --save-dev @iconify/vue

第二步在main.ts中引入并进行地址设置

  1. import { addAPIProvider } from "@iconify/vue";
  2. /**
  3. * @description IconifyAPI相关配置
  4. * @see {@link https://docs.iconify.design/api/providers.html}
  5. */
  6. addAPIProvider("", {
  7. // 地址为项目实际部署的地址 请自己替换
  8. resources: ["http://127.0.0.1:8084"],
  9. });

4.api项目部署

项目部署可以docker,可以Nginx反向代理,我选择的是Nginx反向代理。

第一步 拉取代码;

git clone git@github.com:iconify/api.git

第二步 下载依赖;

依赖下载完成后,会多出两个文件夹lib和cache。其中cache是在项目启动后,拉取的图标集缓存。

第三步 部署api项目代码到服务器目录;

第四步 启动服务,配置Nginx反向代理

启动服务直接运行npm run start 就可以,然后在Nginx配置文件中配置反向代理,重启Nginx,搞定。

  1. server {
  2. listen 8085;
  3. server_name iconify-server;
  4. location / {
  5. proxy_pass http://localhost:3000;
  6. }
  7. }

 说明:api项目的配置在src/config/中,具体可以查看api readme文档。

5.效果展示

6.总结

本文是在项目部署内网时,图标加载不出来的背景下,自己找解决方案的一个总结。由于一般的项目需要使用的图表是很多的,所以,单个引入离线图标(如下图所示)是解决不了实际问题的。

最后在Pure Admin项目文档以及作者的视频帮助下,部署了离线方案,然后自己加入Nginx方案代理,实现了自己项目的iconify图标集的离线使用。

本文是自己实现方案的一个总结,如有不妥之处,欢迎批评指正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/606112
推荐阅读
相关标签
  

闽ICP备14008679号