使用umi的插件功能编写一个自定义插件,实现在打包前去除代码中所有svg图片的title内容功能

news/2024/12/24 11:14:25/文章来源:https://www.cnblogs.com/aoshilin/p/18626964
1.在src下面新建plugins文件夹,并在其中创建你的插件文件,比如 removeSvgTitle.js
2.编写插件代码:
/** Description:当调用打包命令时,去除代码中所有svg图片的title内容,本地打包会改变源文件,提交会比较多,无其他影响* @Author: aoshilin* @Date : 2024-09-27 11:23:25* @LastEditTime: 2024-09-27 11:48:41* @LastEditors: aoshilin*/import type { IApi } from 'umi';
import { join, extname } from 'path';
import { readdirSync, readFileSync, writeFileSync } from 'fs';export default (api: IApi) => {api.describe({key: 'removeSvgTitle',config: {schema(joi) {return joi.object();},},});api.onGenerateFiles(() => {const outputPath = api.paths.absSrcPath;// 递归读取目录中的所有文件function traverseDir(dir: string): string[] {const files: string[] = [];const items = readdirSync(dir, { withFileTypes: true });items.forEach((item) => {const fullPath = join(dir, item.name);if (item.isDirectory()) {files.push(...traverseDir(fullPath));} else if (extname(item.name).toLowerCase() === '.svg') {files.push(fullPath);}});return files;}const files = traverseDir(outputPath || '');// 处理普通 SVG 文件function processSvgFile(filePath: string) {let content = readFileSync(filePath, 'utf-8');// 使用正则表达式移除 <title> 标签及其内容content = content.replace(/<title[^>]*>[\s\S]*<\/title>/gi, '');// 保存修改后的内容writeFileSync(filePath, content, 'utf-8');}// 处理所有 .svg 文件for (const file of files) {processSvgFile(file);}});
};

 

3.注册插件:接下来,你需要在 Umi 的配置文件中注册这个插件。打开 config/config.ts 或者 config/config.js,并添加你的插件到 plugins 数组中。

export default {plugins: [// 其他插件...path.resolve(__dirname, './src/plugins/removeSvgTitle'),],// 其他配置项...
};

 

4.测试插件:完成上述步骤后,尝试构建你的项目 (npm run build),检查构建后的 SVG 文件是否已经没有 title 标签了。

请注意,此方法会直接修改源代码中的 SVG 文件,这可能不是你想要的行为,特别是在这些文件是通过版本控制系统管理的情况下。如果你不希望修改原始的 SVG 文件,你可以在 Webpack 的加载过程中处理 SVG 文件,而不是在生成文件时修改它们。例如,你可以创建一个自定义的 Webpack 加载器(loader)或使用现有的 loader 并对其进行配置以忽略 title 标签。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858034.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器连续循环数据打印分页时分割模块问题

css设置@media print识别打印容器,给独立块元素(不想被分割的class添加 page-break-inside: avoid; 避免在元素内部进行分页 ),如下: -- 这样遇到一页纸不够放的时候不会分割 print-wrap 这个元素,自动换行到下一页~ @media print { .printChild { width: 100%;…

BERT的继任者ModernBERT:融合长序列处理、代码理解与高效计算的新一代双向编码器

BERT 发布于 2018 年(从人工智能发展速度来看已是遥远的过去),但它至今仍在广泛使用:实际上它目前是 HuggingFace hub 上下载量第二高的模型,月下载量超过 6800 万次,仅次于另一个针对检索任务优化的编码器模型。这源于其编码器架构在处理日常实际问题方面表现出色,例如…

OpenHarmony怎么修改DPI密度值?触觉智能RK3566鸿蒙开发板演示

开源鸿蒙OpenHarmony系统下,修改DPI密度值的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新开源鸿蒙OpenHarmony5.0 Release系统,适合鸿蒙开发入门学习本文介绍在开源鸿蒙OpenHarmony系统下,修改DPI密度值的…

医疗行业的项目管理革新:提升工作效率与患者体验

一、医疗行业的痛点 医疗行业在日常运营中面临一系列管理和运营上的挑战,以下是一些主要痛点: 1.任务管理与进度跟踪困难 在医院或医疗机构中,医疗任务和工作往往涉及多个科室、医护人员和患者。传统的管理方式通常依赖纸质记录或简单的电子表格,这种方法在任务繁多、协作复…

实战案例:基于 Java Web 技术的医药信息管理系统设计与构建

1. 引言 1.1系统目标 本医药信息管理系统旨在实现药品信息、进货信息、销售信息、库存信息、处方信息以及员工信息等的全面管理,提高医药企业运营效率,优化业务流程,确保信息准确、及时、安全,为企业决策提供有力支持,同时提升服务质量,增强企业竞争力。 1.2适用范围 本系…

CentOS安装GitLab社区版

官方文档给出的下载链接,貌似下不动。 因此选择使用清华大学的镜像站来下载社区版的GitLab https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/ 于/etc/gitlab/gitlab.rb配置文件处,修改你的GitLab访问地址 默认GitLab访问地址是:external_url http://gitlab.example.c…

微信小程序云开发 校园二手交易平台

1.组员分工 在这个校园二手交易平台小程序中,我们组有着非常明细的分工。组内一共有四人,分别是祝辰、林炜辰、秦盼盼、吕冠逾,接下来我会一一描述分工。 祝辰:第七组的组长,主要整个软件项目工程的进度协调。在软件项目初期,主要负责用户图、类图、书序图的绘制,明确项…

冬季双旦节,宠物行业市场部用啥办公软件最佳?

随着冬季双旦节的临近,宠物行业迎来了业务的高峰期。在这个关键时期,仓储物流环节的高效运作对于满足宠物用品市场需求、提升客户满意度以及实现企业业绩增长起着举足轻重的作用。合适的可视化团队协作办公软件能够助力宠物公司更好地管理仓储物流,精准调配资源。本文将为宠…

小迪安全-基础入门-APP应用微信小程序原生态开发H5+Vue技术WEB封装打包反编译抓包点

APP应用&微信小程序&原生态开发&H5+Vue技术&WEB封装打包&反编译抓包点知识点: 1、基础入门-APP应用-开发架构安全问题 2、基础入门-小程序应用-开发架构安全问题 通用: 1、反编译-得到源码-源码提取资产(泄漏的配置信息)-安全测试 2、抓包-资产-安全测…

SARscape自动形变建模工具的使用

SARscape形变建模工具可利用InSAR形变数据或者大地测量数据和GPS作为数据源进行反演建模,可反演求出滑动/裂缝分布;利用构造源计算矩张量,得到形变机制图。可对构造变化(如地震等)、火山源和核爆炸等直接反演建模。 SARscape6.1推出自动建模工具,它能够自主执行非线性和线…

PostgreSQL 的特点

title: PostgreSQL 的特点 date: 2024/12/24 updated: 2024/12/24 author: cmdragon excerpt: PostgreSQL 是当今最流行的开源关系型数据库之一,凭借其优秀的性能、稳定性和丰富的功能集在用户群中享有极高声誉。相比于其他关系型数据库管理系统,PostgreSQL 拥有许多独特的特…