检索项目中冗余的图片

news2024/11/13 10:50:03

说在前面

平时在项目中我们会使用到一些图片,很多时候我们会直接将图片打包到项目中去,随着项目的更新迭代,我们可能会删除一些图片的引用,但没将图片源文件删除,这个时候没有被引用到的图片就会成为冗余的文件,而且图片文件的大小一般都会比较大,这个时候就会使得项目的体积白白增大了,所以现在我们可以制作一个简单的检索脚本来找出项目中未被应用的图片资源,将没用过的图片删除的话可以缩小项目包的体积,对打包速度也有一定的优化。

思路分析

实现步骤

  • 1、获取图片资源

首先我们需要先获取到项目中所有的的图片资源文件,一般图片资源都会有一个目录来单独存放,我们只需要获取该目录下的文件列表即可:

这里我将图片都放在了image目录下,所以直接读取image目录获取到该目录下的所有图片文件即可,如果有多级目录存放的话,我们就需要递归进行获取了。

const imageList = fs.readdirSync("./image");
  • 2、遍历项目文件目录文件

一般我们的项目文件目录都是会有多层嵌套的,这里我模拟创建了一个简单的目录机构,具体结构如下图:

image.png

这种时候我们需要递归去遍历每一级目录,获取到所有的文件,我们需要这样做:先获取当前目录下的所有文件和目录,遍历判断是文件还是文件夹,是文件的话我们可以直接获取文件文本内容来判断是否存在图片列表中的图片,否则则需要递归去获取下级目录文件,具体代码如下:

const findImg = (dir = "./src") => {
  const fileList = fs.readdirSync(dir);
  fileList.forEach((item) => {
    const path = dir + "/" + item;
    if (fs.statSync(path).isFile()) {
      const content = fs.readFileSync(path, "utf8");
      imageList.forEach((image) => {
        if (content.includes(image)) {
          if (!res[path]) res[path] = [];
          res[path].push(image);
        }
      });
    } else {
      findImg(path);
    }
  });
};

局限

这种检索方法只适用于搜索在代码中直接引入路径的图片文件,如果是通过接口返回的图片名字或路径来进行动态引入的话,我们则无法通过这个脚本检索到。

完整代码

const fs = require("fs");
const imageList = fs.readdirSync("./image");
console.log("imageList", imageList);
const set = new Set(imageList);
const res = {};
const findImg = (dir = "./src") => {
  const fileList = fs.readdirSync(dir);
  fileList.forEach((item) => {
    const path = dir + "/" + item;
    if (fs.statSync(path).isFile()) {
      const content = fs.readFileSync(path, "utf8");
      imageList.forEach((image) => {
        if (content.includes(image)) {
          if (!res[path]) res[path] = [];
          res[path].push(image);
          set.delete(image);
        }
      });
    } else {
      findImg(path);
    }
  });
};
findImg();

console.log(res);
console.log(set);

image.png

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一位十年测试的修炼之路,希望能帮你点清现实

对于刚进入软件测试工作岗位的新人,如何快速、健康的在职业道路上成长,作者谈了几点自己看法: 1、兴趣是最好的老师 对于软件测试工作,通常是比较枯燥的,如果没有兴趣很难做到持久。 我最近参与了一个软件测试项目&a…

Android AIDL跨进程通信

一、前言 什么是AIDL?AIDL用来做什么的?怎么使用AIDL? AIDL是Android的一种接口定义语言,语法跟java接口定义类似,文件格式为 .aidl 非 .java 。AIDL主要是用来实现跨进程通信,AIDL的本质也是通过Binder机…

【集群】Haproxy搭建Web群集

文章目录 一、Haproxy 相关概念1. Haproxy 的概述2. Haproxy 的主要特性3. 常见的 Web 集群调度器4. 常见的应用分析4.1 LVS 应用4.2 Haproxy 应用4.3 LVS、Nginx、Haproxy的区别 5. Haproxy 调度算法原理5.1 roundrobin5.2 static-rr5.3 leastconn5.4 source5.5 uri5.6 url_pa…

【1 TypeScript - TypeScript语法的类型】

1 认识TypeScript 主要是为了解决类型检查的痛点.是拥有类型的JavaScript超集,虽然编写的是Typescript,但是最终仍然会编译成JavaScript代码. 2 TypeScript的运行环境 使用ts-node 3 变量的声明 变量的类型推导(推断) 4 JavaScript类型 – Array类…

ThinkPHP5源码阅读-类的自动加载register与autoload的实现

文章目录 前言如何下载ThinkPHP5源码关于自动加载类类的准备进入base.phpLoader::register() 注册自动加载函数对composer 的支持对think和trait的支持对extend目录的支持 类的加载autoload方法class_alias的定义和使用findFile 查找类 作业:自定义一个可以被自动类…

Java设计模式—责任链模式(Chin of Responsibility)

目录 前言 一、责任链模式的简介 二、责任链模式的概念 三、责任链模式的作用 四、责任链模式的优、缺点 1.责任链模式的优点 2.责任链模式的缺点 五、责任链模式的应用场景 六、代码案例 UML类图 1.定义一个请求枚举类 2.定义一个请求类 3.定义一个抽象处理接口 4、…

TS中any与unknown详解,示例

文章目录 前言一、一个示例二、示例目的1、功能描述2、主要区别3、代码实现 总结 前言 本片文章主要是在写ts时遇到不知道类型,很容易就想到用any可以解决一切,但这样写并不好。所以今天就总结学习一下,比较好的处理任意类型的unknown。 一、…

2023年最新网络安全入门指南,保姆级教程!啃完这篇就够了

一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…

大气污染扩散模型Calpuff教程

详情点击链接:大气污染扩散模型Calpuff教程一,Calpuff 1.Calpuff模型 2、Calpuff模型基础 3、Calpuff模型下载安装 1)Calpro系统安装 2)安装环境要求 3)需安装的辅助软件二,数据预处理 1.网格设置 …

Vue3-04-生命周期

Vue 的生命周期描述组件从创建到销毁的全过程。Vue3 和 Vue2 的生命周期钩子非常像,我们仍然可以在相同的场景下使用相同的钩子函数。 Vue3 在设计时对先前的版本进行了向下兼容,如果你的项目还在使用选项式 API 进行构建,那么不需要修改生命…

【stable diffusion】图片批量自动打标签、标签批量修改(BLIP、wd14)用于训练SD或者LORA模型

参考: B站教学视频【:AI绘画】新手向!Lora训练!训练集准备、tag心得、批量编辑、正则化准备】官方教程:https://github.com/darkstorm2150/sd-scripts/blob/main/docs/train_README-en.md#automatic-captioning 一、…

Springboot全文链路id,并ELK搭建部署整合全文链路id

Springboot全文链路id,并ELK搭建部署整合全文链路id 1.docker-compose.yaml部署 version: 3 services:elasticsearch:image: elasticsearch:7.13.2container_name: elasticsearchenvironment:- "cluster.nameelasticsearch" #设置集群名称为elasticsearch- "d…

[笔记]C++并发编程实战 《五》C++内存模型和原子类型操作

文章目录 前言第5章 C内存模型和原子类型操作5.1 内存模型基础5.1.1 对象和内存位置5.1.2 对象、内存位置和并发5.1.3 修改顺序 5.2 C中的原子操作和原子类型5.2.1 标准原子类型 总结 前言 第5章 C内存模型和原子类型操作 本章主要内容: C11内存模型详解标准库提…

【Docker】子系统与其相关名词的界定、Control Groups等详细讲解

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…

回收旧物系统平台开发的功能

1、定位服务 为了方便用户寻找最近的废品回收点,小程序应该提供位置服务和导航功能。 2、垃圾分类知识普及 用户可以查看所有垃圾分类知识,每种物品属于哪一个类型的垃圾分类。一目了然。相当于一本活字典,用户可以随时翻看查阅垃圾分类的…

人工智能(pytorch)搭建模型11-pytorch搭建DCGAN模型,一种生成对抗网络GAN的变体实际应用

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型11-pytorch搭建DCGAN模型,一种生成对抗网络GAN的变体实际应用,本文将具体介绍DCGAN模型的原理,并使用PyTorch搭建一个简单的DCGAN模型。我们将提供模型…

java+openlayer实现大气污染扩散模拟反演

一、模拟参数及效果 二、应用背景 大气污染是当今社会面临的一个重要问题。随着工业化和城市化的进程,大气污染问题变得越来越严重。为了更好地应对这个问题,许多科学家和研究人员开始探索大气污染扩散反演技术。 大气污染扩散反演技术是一种通过数学模…

给软件测试人的一封信,全网最佳“指路明灯“

一、一招鲜吃遍天下 你需要有一个核心技能。这个技能至少达到远超你的同事(包括开发岗位的同事的)平均水平。最好达到业界领先水平,且这个核心技能需要不断打磨提高。比如,我选择的核心技能是使用Python写代码。这个核心技能可以…

3.2 基于Java配置类整合SSM框架实现用户登录

一、基于Java配置类整合SSM框架实现用户登录 1、创建Maven项目 Maven项目 - SSMLoginNew 单击【Finish】按钮 2、添加相关依赖 在pom.xml文件里添加相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache…

Kubernetes 1.27 加快 Pod 启动速度

如何在大型集群中加快节点上的 Pod 启动&#xff1f;这是企业集群管理员常常会面临的问题。 这篇博文重点介绍了从 kubelet 一侧加快 Pod 启动的方法。此方法不涉及通过 kube-apiserver 由 controller-manager 创建 Pod 所用的时间段&#xff0c;也不包含 Pod 的调度时间或在其…