svgo-loader配合svg-sprite-loader使用,网上教程很多,不赘述

  const svgRule = config.module.rule("svg-sprite");
svgRule.uses.clear(); svgRule
.test(/\.(svg)(\?.*)?$/)
.include.add([resolve("src/icons")])
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: "icon-[name]"
})
.end()
.use("svgo-loader")
.loader("svgo-loader")
.tap(options => ({
...options,
plugins: [{ name: "removeAttrs", params: { attrs: "fill" } }]
}))
.end();

那么问题来了,并不是所有的svg都需要去除颜色样式。有些不用自己改色,或者本身很复杂多颜色的svg,前端自己上色肯定是有问题的

那这种链式操作如何解决呢,我把链式操作分了两步(笑哭)

第一步使用svg-sprite解析所有的icons文件夹下的svg文件

第二步使用svgo-loader去除除了‘original’文件夹下的svg文件

  // 第一步
const svgRule = config.module.rule("svg-sprite");
svgRule.uses.clear();
svgRule
.test(/\.(svg)(\?.*)?$/)
.include.add([resolve("src/icons")])
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: "icon-[name]"
})
.end(); // 第二步
const svgoRule = config.module.rule("svgo");
svgoRule
.test(/\.(svg)(\?.*)?$/)
.exclude.add([resolve("src/icons/common/original")])
.end()
.use("svgo-loader")
.loader("svgo-loader")
.tap(options => ({
...options,
plugins: [{ name: "removeAttrs", params: { attrs: "fill" } }]
}))
.end();

到此解决了original文件夹下svg不删除fill的逻辑

那么在前端架构时,公共的svg放在common下,每个项目用到的svg放到每个子文件夹下,就会存在多个文件夹不需要去修改svg

在icons文件夹下拿到所有的original文件,exclude掉

    const findFileFolder = (dir, filename) => {
const files = fs.readdirSync(resolve(dir));
const result = [];
files.map(file => {
const filePath = `${dir}/${file}`;
if (fs.statSync(filePath).isDirectory()) {
if (file === filename) {
result.push(filePath);
} else {
result.push(...findFileFolder(filePath, filename));
}
}
});
return result;
}; // svgo-loader 去除svg文件中的fill属性,方便前端更改颜色
// 对于不需要更改颜色的svg,
// 在对应文件夹(common/(项目名1)/(项目名2)/...)中创建子文件夹
// 命名为“original”(!!必须!!)
// 将不会更改颜色(多颜色)的svg放入original文件夹,默认不loader此文件夹文件
const svgoRule = config.module.rule("svgo");
const svgoExcludePaths = findFileFolder("src/icons", "original");
svgoRule
.test(/\.(svg)(\?.*)?$/)
.exclude.add([...svgoExcludePaths.map(path => resolve(path))])
.end()
.use("svgo-loader")
.loader("svgo-loader")
.tap(options => ({
...options,
plugins: [{ name: "removeAttrs", params: { attrs: "fill" } }]
}))
.end();

使用svgo-loader只对部分文件生效的更多相关文章

  1. ApexSQLLog可以只读取ldf文件

    ApexSQLLog可以只读取ldf文件 需要数据库在线 本文版权归作者所有,未经作者同意不得转载.

  2. HTML input="file" 浏览时只显示指定文件类型 xls、xlsx、csv

    html input="file" 浏览时只显示指定文件类型 xls.xlsx.csv <input id="fileSelect" type=" ...

  3. <input type="file" />浏览时只显示指定文件类型

    <input type="file" />浏览时只显示指定文件类型 <input type="file" accept="appli ...

  4. findstr 只搜寻指定文件类型

    Title:findstr 只搜寻指定文件类型 --2012-05-04 09:27 findstr /i /m /S /C:"关键字"  *.php *.asp *.jsp

  5. Linux显示只显示目录文件

    Linux显示只显示目录文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -l -d */ drwxr-xr-x 2 root root 4096 1 ...

  6. webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件

    一 .webpack学习环境准备: 1:window系统 2:安装node.js  官方网址 下载好后下一步下一步安装即可 安装步骤略过....... 3:nrm的安装 打开cmd命令控制台 输入:n ...

  7. SQLLoader7(只导入数据文件的其中几行记录)

    数据文件: D:\oracletest\test1.txt SMITH CLERK ALLEN SALESMAN WARD SALESMAN JONES MANAGER MARTIN SALESMAN ...

  8. SQL LOADER 的用法 TXT文件导入非常之快

    前提,需要本地安装ORACLE 客户端 控制文件 cms.ctl load dataCHARACTERSET UTF8infile 'oracle.txt'APPEND INTO TABLE JR f ...

  9. 如何让.gitignore文件生效

    改动过.gitignore文件之后,在repo的根目录下运行 # 先将当前仓库的文件的暂存区中剔除 git rm -r --cached . # 再添加所有的文件到暂存区,这时.gitignore文件 ...

  10. Intellij 设置只更新静态文件(js、view、css)的方法

    1.打开 Tomcat Run/Debug configuration 2.打开Deployment标签 3.在“Deploy at Server Startup” 中,移出现有的.war 包 4.点 ...

随机推荐

  1. Gorm 关联关系介绍与基本使用

    目录 一 Belongs To(一对一) 1.1 Belongs To 1.2 重写外键 1.3 重写引用(一般不用) 1.4 Belongs to 的 CRUD 1.5 预加载 1.6 外键约束 二 ...

  2. 开源IM项目OpenIM发布消息推送api,支持应用与IM互通深度融合

    以办公场景为例,比如员工入职通知,放假通知等业务通知,由oa系统处理具体的业务逻辑,再调用消息推送api,触达到目标用户. 效果示例 以协同办公为例,员工收到系统推送的工作通知,有新任务需要处理. 员 ...

  3. 从零开始配置 vim(12)——主题配置

    在我们进一步增强vim的功能之前,我们先为vim准备一个漂亮的主题,毕竟对着一个丑陋原始的界面多少有点提不起劲来进行编程.长时间对着丑陋的界面多多少少会产生抑郁情绪的.下面推荐几款我觉得还不错的主题插 ...

  4. Go中sync.map使用小结

    sync.map 前言 深入了解下 查看下具体的实现 Load Store Delete LoadOrStore 总结 流程图片 参考 sync.map 前言 Go中的map不是并发安全的,在Go1. ...

  5. 控制node版本

    https://blog.csdn.net/qq_46372463/article/details/125357226 这个作者写的操作成功了

  6. 人工智能LLM模型:奖励模型的训练、PPO 强化学习的训练、RLHF

    人工智能LLM模型:奖励模型的训练.PPO 强化学习的训练.RLHF 1.奖励模型的训练 1.1大语言模型中奖励模型的概念 在大语言模型完成 SFT 监督微调后,下一阶段是构建一个奖励模型来对问答对作 ...

  7. workman在线五子棋

    一.下载安装workman,地址:https://github.com/walkor/workerman composer require workerman/workerman 二.cd到worke ...

  8. Spark相关面试题

    Spark Core面试篇01 一.简答题 1.Spark master使用zookeeper进行HA的,有哪些元数据保存在Zookeeper? 答:spark通过这个参数spark.deploy.z ...

  9. ubuntu之jupyter notebook配置

    ubuntu之jupyter notebook配置 安装jupyter: 前提:安装pip pip install jupyter jupyter notebook 配置: 生成配置文件: jupyt ...

  10. Pandas resample数据重采样

    随机抽样,是统计学中常用的一种方法,它可以帮助我们从大量的数据中快速地构建出一组数据分析模型.在 Pandas 中,如果想要对数据集进行随机抽样,需要使用 sample() 函数. sample() ...