如何在 Webpack 中开启图片压缩

news2025/2/28 12:17:18

工具对比

npmtrends.com/image-minim…

这四个压缩工具,从下载量来看,image-webpack-loader 较多,image-minimizer-webpack-pluginimagemin-webpack-plugin 次之,imagemin-webpack 已经不再维护,因此不考虑此工具。

www.npmjs.com/package/ima…

以下是对 image-minimizer-webpack-pluginimage-webpack-loaderimagemin-webpack-plugin 的使用进行简要介绍。

使用与配置

先给出没有加压缩工具的 webpack 配置

const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {entry: {index: './index.js',},output: {path: path.resolve(__dirname, 'build1'),filename: '[name].js',clean: true},module: {rules: [{test: /.(css)$/,use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader']}, {test: /.(jpe?g|png|gif|ico|svg)$/,exclude: /node_modules/,type: 'asset',parser: {dataUrlCondition: {maxSize: 8 * 1024}},}]},plugins: [new MiniCssExtractPlugin({filename: '[name].css',ignoreOrder: false}),],mode: 'production',optimization: {runtimeChunk: {name: 'runtime~single'}}
} 

image-minimizer-webpack-plugin

安装:cnpm i image-minimizer-webpack-plugin imagemin -D

无损压缩:cnpm install imagemin-gifsicle imagemin-jpegtran imagemin-optipng imagemin-svgo -D

配置如下:

const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");

module.exports = {optimization: {minimizer:[new ImageMinimizerPlugin({minimizer: {implementation: ImageMinimizerPlugin.imageminGenerate,options: {plugins: [["gifsicle", { interlaced: true }],["jpegtran", { progressive: true }],["optipng", { optimizationLevel: 5 }],["svgo",{plugins: ["preset-default","prefixIds",{name: "sortAttrs",params: {xmlnsOrder: "alphabetical",},},],},],],},},}),]}
} 

打包后,图片大小压缩至 7.41 MB。


有损压缩:cnpm install @squoosh/lib --save-dev

const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");

module.exports = {optimization: {minimizer:[new ImageMinimizerPlugin({minimizer: {implementation: ImageMinimizerPlugin.squooshMinify}}),],runtimeChunk: {name: 'runtime~single'}}
} 

打包后,图片大小压缩至 1.48 MB。

image-webpack-loader

安装:cnpm install image-webpack-loader -D

配置如下:

module.exports = {module: {rules: [{test: /.(jpe?g|png|gif|ico|svg)$/,exclude: /node_modules/,type: 'asset',parser: {dataUrlCondition: {maxSize: 8 * 1024}},use: [{loader: 'image-webpack-loader',// options: {// disable: process.env.NODE_ENV === 'development'// },}]}]},
} 

打包后,图片大小压缩至 1.69 MB。

imagemin-webpack-plugin

安装:cnpm install imagemin-webpack-plugin

配置如下:

const ImageminPlugin = require('imagemin-webpack-plugin').default

module.exports = {optimization: {minimizer: [new ImageminPlugin({// disable: process.env.NODE_ENV === 'development',}),],runtimeChunk: {name: 'runtime~single'}}
} 

打包后,图片大小压缩至 7.64 MB。

压缩前后对比

这三个工具的共同点:压缩图片都依赖于 imagemin,所以对使用这几个工具压缩图片前后体积对比,个人感觉意义不大;如果对同一图片压缩后体积大小不一致,甚至差别很大,很可能是因为压缩相关的配置不太一致。

不过我们可以就以上的配置(基本是官方给的示例配置),去做一些比较。

工具使用感受压缩前压缩后
image-minimizer-webpack-plugin配置较复杂8.26 MB无损:7.41 MB有损:1.48 MB
image-webpack-loader配置简单8.26 MB有损:1.69 MB
imagemin-webpack-plugin配置简单8.26 MB无损:7.64 MB

使用建议

最后从工具的流行程度、使用感受、压缩力度等方面综合考虑,推荐使用 image-webpack-loader 来压缩图片。

注意:在安装包的时候可能会报错,npm install image-webpack-loader -D,主要是在下载一系列压缩工具的时候出错。这时可以切换为国内镜像,用 cnpm install image-webpack-loader -D,这样可以成功安装。

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

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

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

相关文章

【云原生】手把手带你从零开始搭建kubernetes最新版本实战

文章目录前言一. 实验环境二. k8s 的介绍三 . k8s的安装3.1 搭建实验环境3.1.1 硬件层面的要求3.1.2 软件层面环境配置3.2 docker的安装3.2.1 搭建docker3.2.2 部署 cri-dockerd3.3 部署k8s3.3.1 配置添加阿里云的yum源3.3.2 安装kubeadm kubelet kubectl3.3.3 k8s-master节点初…

汽车装配工厂立库物料运送线PLC无线应用

一、项目背景 此次项目地在比亚迪的西安工厂,需要实现PLC无线通讯的地方是汽车厂的立体仓库物料运输线。生产物流担负运输、存储、装卸物料等任务。立体仓库主要通过检测、信息识别、控制、通信、监控调度、大屏显示及计算机管理等装置组成。将操作指示信息存储在运…

IDEA插件之Mybatis log插件安装及使用

一 前言分析 我们在idea控制台看见的sql日志通常是这样的,实际开发调试中我们想把完的sql复制出来,到数据库中执行分析数据情况。但是如果我们的sql有动态传参控制台输出的sq入参会用“?”代替入参,不能直接使用。 SqlSession […

Linux_CentOS虚拟机安装教程

目录 一、安装虚拟化软件 二、配置和安装虚拟机 一、安装虚拟化软件 有关虚拟机软件有很多,如Oracle VM VirtualBox、VMware Workstation Player、VMware Workstation Pro等…… 博主在这里用Oracle VM VirtualBox演示。 进入Oracle VM VirtualBox官方网站https…

算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ

算法训练营 day48 动态规划 完全背包 零钱兑换 II 组合总和 Ⅳ 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物…

【零基础入门前端系列】—语义化标签、实体字符、视频、音频(八)

【零基础入门前端系列】—语义化标签、实体字符、视频、音频(八) 一、什么是HTML语义化标签 语义化的标签,旨在让标签有自己的含义 如上代码:p标签与span标签的区别之一就是,p标签的含义是段落而span标签没有独特的…

专家分享 | 租赁型售楼处标准化示范区提效研究

2023年2月8日上午,优积科技邀请原金地集团北京公司 高级室内设计专业应锎经理为我司团队分享《租赁型售楼处标准化示范区提效》的专题。 此次专家分享课题加上大家踊跃讨论时间长达3小时,会上应总详细介绍了租赁型售楼处标准化示范区提效,需…

node.js+vue婚纱影楼摄影婚庆管理系统vscode项目

:减少管理婚庆工作人员的负担;管理人员可以随时浏览婚纱网站以便及时知道哪里需要修改和更进,同时还可以查看用户反馈给我们的信息,让管理员更加直观的了解客户的需求;该系统改变了以前手工记录的方式,使用…

jsp医学影像数据管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 医学影像数据管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql&#xff0…

Unity | Script Hot Reload

官网地址:https://hotreload.net/ 一、作用 Unity在运行时,可以直接修改代码,避免等待过长的编译时间。 二、说明 1、支持的平台? Windows、MacOS、Linux 2、支持的Unity版本? 2018.4 (LTS)2019.4 (LTS)2020.3 (L…

Spring ⑦ 循环引用问题

Spring ⑦ 循环引用问题 Spring 源码系列文章会遵循由浅入深,由易到难,由宏观到微观的原则,目标是尽量降低学习难度,而不是一上来就迷失在源码当中. 文章会从一个场景作为出发点,针对性的目的性极强的针对该场景对 Spring 的实现原理,源码进行探究学习。…

时间轮(TimingWheel)

一、什么是时间轮时间轮其实就是一种环形的数据结构,可以想象成时钟,分成很多格子,一个格子代表一段时间(这个时间越短,Timer的精度越高)。并用一个双向链表存储放在该格子上的延时任务,同时一个…

下一个排列-力扣31-java

一、题目描述整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&…

记一次20撸240的沙雕威胁情报提交(2019年老文)

0x01 起因 这是一篇沙雕文章,没什么技术含量,大家娱乐一下就好 前几个月,我的弟弟突然QQ给我发来了一条消息,说要买个QQ飞车的cdk,我作为一个通情达理的好哥哥,自然不好意思回绝,直接叫他发来…

跟着团子学SAP PSS: 如何实现物质在不同法规下的准入管理(配置篇)

全球各地针对化学品的监管出台了很多法规,有相当一部分的法规都是输入准入制:只有在法规中列示的化学物质在当地才具有适销性,未列示的物质只有在一些特殊条件下才能销售。加拿大的DSL(加拿大本国物质清单)&#xff0c…

【Python入门第九天】Python 字符串

字符串字面量 python 中的字符串字面量由单引号或双引号括起。 ‘hello’ 等同于 “hello”。 可以使用 print() 函数显示字符串字面量: 实例 print("Hello") print(Hello)运行实例 用字符串向变量赋值 通过使用变量名称后跟等号和字符串&#xff0…

yolov3-tiny模型转trt的一个实例

感谢作者分享,仓库地址:https://github.com/zombie0117/yolov3-tiny-onnx-TensorRT?tdsourcetags_pcqq_aiomsg该仓库的代码没有使用现有的神经网络框架,如pytorch,tensorflow等,因此环境搭建相对比较容易。仓库作者是…

Docker逃逸

文章目录原理环境搭建Docker 环境判断Docker 容器逃逸特权模式逃逸如何判断是否为特权模式逃逸docker.sock挂载逃逸逃逸Remote API未授权访问未授权访问逃逸容器服务缺陷逃逸影响版本环境搭建逃逸脏牛漏洞逃逸参考原理 docker其实就是一个linux下的进程,它通过Name…

RV1126笔记二十八:RKNN上部署OCR测试

若该文为原创文章,转载请注明原文出处。 本篇文章只是记录下测试OCR的效果,想了解全过程,参考: 【工程部署】手把手教你在RKNN上部署OCR服务(上)_opencv rknn_ocr_三叔家的猫的博客-CSDN博客 【工程部署】手把手教你在RKNN上部署OCR服务(下)_三叔家的猫的博客-CSDN博…

ROS2中使用gazebo仿真时找不到libgazebo_ros_openni_kinect.so

因为ros2的gazebo_ros_pkgs中,已经将该插件移除,或者说将该插件的功能合并到libgazebo_ros_camera.so中, 这里是作者的说明。 合并后,深度相机的用法参考这里。 主要是将type改成depth。还有其他类型的相机,可以参考具…