• 抽离图片文件打包到指定路径下
  • 压缩抽离的图片资源
  • 配置生成html中的图片路径

一、准备测试环境

//工作区间
src//文件夹
index.js//入口文件
index.css//样式文件
index.html//结构文件
image//图片文件夹
package.json//配置打包的环境信息
webpack.config.js//打包配置文件

首先需要准备打包插件(这里打包文件还不是用来处理图片文件的):

   "clean-webpack-plugin": "^3.0.0",//清除构建文件夹
"css-loader": "^3.0.0",//用来加载css文件
"html-webpack-plugin": "^3.2.0",//用来抽离html文件
"style-loader": "^0.23.1",//用来将css样式转换成行间样式
"webpack": "^4.35.2",//打包工具
"webpack-cli": "^3.3.5"//打包工具的指令集

通过上面的注释,可以看到上面的打包配置还不能处理图片资源,所以在测试上面的打包插件配置是否成功的情况下暂时不要在css中出现引用图片路径的样式,在html引入的图片路径在抽取html文件的时候并不会对路径进行处理,打包后(打包前后路径不一致)可能会找不到图片。

 var path = require('path');
var {CleanWebpackPlugin} = require('clean-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry:{
index:'./src/index.js'
},
output:{
path:path.resolve(__dirname,'dist'),
filename:'[name][hash:5].bundle.js'
},
module:{
rules:[
{
test:/\.css$/,
use:[
{loader:'style-loader'},
{loader:'css-loader'}
]
}
]
},
plugins:[
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template:'./src/index.html'
})
],
mode:'development'
}

webpack.config.js文件代码

测试上面的打包环境无误的情况下正式进入webpack提取图片文件操作。

二、抽离图片文件打包到指定路径下

在前面准备的打包配置基础上再增加两个加载器插件:

npm install url-loader --save-dev
npm install file-loader --save-dev

然后,这一步就可以给css代码中添加图片路径了,config.js文件中添加下面这段配置:

 module:{
rules:[
{
test:/\.(png|jpg|jpeg|gif)$/,
use:[
{
loader:'url-loader',
options:{
name:'[name][hash:5].[ext]',//设置抽离打包图片的名称--[ext]用来获取图片的后缀
limit:100000,//限制图片大小 <= 100kb 进行base64编码(小于100kb打包进js文件)--测试时根据图片的大小调整
outputPath:'image'//设置输出文件夹名称,这个文件夹会与主入口文件在同一路径下
}
}
]
}
]
}

这段配置也还只能配置抽离css中的图片文件,而且还只是抽离,并未对图片进行压缩处理,接下来看怎么配置压缩图片文件。

三、压缩抽离的图片资源

继续前面的步骤,下载安装图片压缩需要的加载器:

npm install img-loader --save-dev
npm install imagemin-loader --save-dev
npm install imagemin-pngquant --save-dev

然后图片资源(正则匹配图片后缀)的加载器模块下添加图压缩相关加载器和插件,为了更好的展示代码结构这段代码会与上一步的示例代码部分重叠:

 module:{
rules:[
{
test:/\.css$/,
use:[
{loader:'style-loader'},
{loader:'css-loader'}
]
},
{
test:/\.(png|jpg|jpeg|gif)$/,
use:[
{
loader:'url-loader',//给图片资源配置路径加载器,用于文件抽离
options:{
name:'[name][hash:5].[ext]',//设置抽离打包图片的名称--[ext]用来获取图片的后缀
limit:100000,//限制图片大小 <= 100kb 进行base64编码(小于100kb打包进js文件)--测试时根据图片的大小调整
outputPath:'image'//设置输出文件夹名称,这个文件夹会与主入口文件在同一路径下
}
},
{
loader:'img-loader',//配置图片资源加载器,用于图片压缩
options:{
plugins:[//给图片资源加载配置插件
require('imagemin-pngquant')({//用于图片压缩的imagemin-pngquant,还有一个隐式调用的加载器imagemin-loader
quality:[0.3,0.5]//图片压缩30%~50%
})
]
}
}
]
}
]
}

最后,就剩下html文件中的图片引用没有处理。

四、配置生成html中的图片路径

通过配置html文件的加载器,然后再配置上应用图片的标签名和属性名,html资源中的图片应用就会被添加到加载器中进行处理(包括上面的图片抽离和压缩),先下载解析html文件的加载器:

npm install html-loader --save-dev

config配置(增加以下配置):

 module:{
rules:[
{
test:/\.html$/,
use:[
{
loader:'html-loader',
options:{
attrs:['img:src']//配置html文件中img标签的src属性值
}
}
] }
]
}

最后需要注意的是,针对每种图片格式的压缩配置都不是一样的,也就是说有不同的压缩插件,详细参考npm插件手册:https://www.npmjs.com/package/img-loader

webpack提取图片文件打包压缩的更多相关文章

  1. C#实现对图片文件的压缩、裁剪操作实例

    本文实例讲述了C#对图片文件的压缩.裁剪操作方法,在C#项目开发中非常有实用价值.分享给大家供大家参考.具体如下: 一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便 ...

  2. .Net Core 文件打包压缩

    最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用  ICSharpCode.SharpZipLib 最符合项目的要求. 具体实现如下: 1.在 Nuget 中安装  ICSharpCod ...

  3. 【JavaScript】 Webpack安装及文件打包

    背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...

  4. C#对图片文件的压缩、裁剪操作初探

    在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...

  5. C#对图片文件的压缩、裁剪操作

    在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便.毕竟网站运维人员不一定会对图片做处理,经常超出大小限制,即使会使用图片处理软件的,也由于个人水平方面原因,处理效果差强 ...

  6. Linux_文件打包,压缩,解压

    一.压缩命令 文件格式:*.gz 命令:gzip 文件名 (ps:不能压缩目录,切压缩后不保留原文件) 压缩前 -rw-r--r--. 1 root root 315 Sep 6 21:03 df.t ...

  7. Linux文件打包压缩、解压缩、备份命令使用方法(转载)

    对于刚刚接触Linux的人来说,一定会给Linux下一大堆各式各样的文件名给搞晕.别个不说,单单就压缩文件为例,我们知道在Windows下最常见的压缩文件就只有两种,一是,zip,另一个是.rar.可 ...

  8. webpack 提取 manifest 文件

    当 webpack 生成 bundle 时, 它同时维护一个 manifest 文件.你可以在生成的 vendor bundle 中找到它.manifest 文件描述了哪些文件需要 webpack 加 ...

  9. Webpack - 把json文件打包进js文件

    把html文件打包进index.js   1  新建文件 typings.d.ts    declare module "*.html" {   const content: st ...

随机推荐

  1. HDU3549:Flow Problem(最大流入门EK)

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <queue> ...

  2. 在Eclipse中使用WindowBuilder设计Swing程序

    在Eclipse中使用WindowBuilder设计Swing程序     Swing程序表示Java的客户端窗体程序,除了通过手动编写代码的方式设计Swing程序之外,Eclipse中还提供了一种W ...

  3. 利用Spring的AbstractRoutingDataSource解决多数据源的问题【代码手动切换,非AOP】

    转: 利用Spring的AbstractRoutingDataSource解决多数据源的问题 多数据源问题很常见,例如读写分离数据库配置. 原来的项目出现了新需求,局方要求新增某服务器用以提供某代码, ...

  4. web.config 配置无后缀文本的访问

    在 www.sslforfree.com 申请ssl免费证书,我参考了别人分享的方法,采用了文件验证的方式.可是按照步骤把文件放好后,一直访问不了,总是跳到了404. 确定文件路径和上传的文件都没问题 ...

  5. mongodb全文搜索

    mongodb 的 enterprise 集合存储企业信息: { "_id" : ObjectId("5d62b2a4380d051cfc00565b"), & ...

  6. MATLAB学习(九)系统聚类

        >> X=rand(100,2); >> Y=pdist(X,'euclidean'); >> Z = linkage(Y,'average'); > ...

  7. 等待数据库引擎恢复句柄失败 SqlServer2012安装时报错 Win10

    上周,在一批Win10系统电脑上安装SqlServer 2012时,屡次发生报错,安装失败,显示的失败信息是:等待数据库引擎恢复句柄失败 如下图所示: 面对这样的错误,我的第一反应是百度,在百度上找了 ...

  8. React Native解决安卓图片被挤压

    Bug如下图所示: iOS显示正常,而安卓出现图片被挤压上去. 最后的解决方法: 比如你的 图片 是 750 x 513 那么 你设置样式的时候 width 为 屏幕的宽 ,高度为 屏幕的 宽 / ( ...

  9. rsync重启的shell脚本

    https://zhidao.baidu.com/question/2078634436717887028.html

  10. Java内部类(1):概述

    > 将一个类的定义放在另一个类的定义内部,这就是内部类. > 使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内 ...