如何处理图片

处理图片

安装插件file-loader

执行npm install --save-dev file-loader

修改src/css/style.less

*{padding:0;margin:0;
}
body{background-color: #f5f5f5;
}
#app{width: 200px;height: 200px;background:url(../images/avatar.png);div {width: 100px;height:100px;color:green;border:1px pink solid;transform: translateX(300px);}
}
复制代码

创建文件夹src/images

mkdir src/images
复制代码

拷贝一张图片放到images文件夹中,名称修改为 avatar.png

修改webpack.config.js

const path = require('path');
var htmlWebpackPlugin = require('html-webpack-plugin');
const extractTextPlugin = require("extract-text-webpack-plugin");const extractCSS = new extractTextPlugin("css/[name]-[hash].css");
module.exports = {mode: 'development',entry: './src/js/app.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'js/[name]-[hash].js'},module: {rules: [{test: /\.css$/,use: extractCSS.extract({fallback: "style-loader", // 编译后用什么loader来提取css文件use: [{ loader: 'css-loader' },{//浏览器添加前缀loader: 'postcss-loader',options: {ident: 'postcss',plugins: [require('autoprefixer')({broswers: ['last 5 versions']})]}}]})},{test: /\.less$/,use: extractCSS.extract({fallback: "style-loader", // 编译后用什么loader来提取css文件use: [{ loader: 'css-loader' },{//浏览器添加前缀loader: 'postcss-loader',options: {ident: 'postcss',plugins: [require('autoprefixer')({broswers: ['last 5 versions']})]}},{ loader: 'less-loader' }]})},{test: /\.js$/,  //添加正则,处理js文件use: [//把ES6语法转换为ES5{ loader: 'babel-loader', options: { "presets": ["@babel/preset-env"] } }]},{test:/\.(png|gif|jpg)$/i,use:[{loader:'file-loader',options:{name:'images/[name].[ext]',publicPath:'../'}}]}]},plugins: [new htmlWebpackPlugin({filename: 'index.html',template: './src/template/index.html',title: 'this is webpack title'}),extractCSS]
};复制代码

说明:

{test:/\.(png|gif|jpg)$/i,use:[{loader:'file-loader',options:{name:'images/[name].[ext]', //图片名称publicPath:'../' //相对于当前引入的文件的路径,这里指src/css/style.less文件}}]
}
复制代码

执行打包命令 npm run webpack

dist目录结构

dist
├── css
│   └── main-5f37473804ea25bf9f09.css
├── images
│   └── avatar.png
├── index.html
└── js└── main-5f37473804ea25bf9f09.js
复制代码

访问dist/index.html

浏览器效果

思考:如何优化图片打包,使用base64编码

使用url-floader,优化图片打包

插件安装url-floader

npm install url-floader --save-dev
复制代码

修改webpack.config.js

const path = require('path');
var htmlWebpackPlugin = require('html-webpack-plugin');
const extractTextPlugin = require("extract-text-webpack-plugin");const extractCSS = new extractTextPlugin("css/[name]-[hash].css");
module.exports = {mode: 'development',entry: './src/js/app.js',output: {path: path.resolve(__dirname, 'dist'),filename: 'js/[name]-[hash].js'},module: {rules: [{test: /\.css$/,use: extractCSS.extract({fallback: "style-loader", // 编译后用什么loader来提取css文件use: [{ loader: 'css-loader' },{//浏览器添加前缀loader: 'postcss-loader',options: {ident: 'postcss',plugins: [require('autoprefixer')({broswers: ['last 5 versions']})]}}]})},{test: /\.less$/,use: extractCSS.extract({fallback: "style-loader", // 编译后用什么loader来提取css文件use: [{ loader: 'css-loader' },{//浏览器添加前缀loader: 'postcss-loader',options: {ident: 'postcss',plugins: [require('autoprefixer')({broswers: ['last 5 versions']})]}},{ loader: 'less-loader' }]})},{test: /\.js$/,  //添加正则,处理js文件use: [//把ES6语法转换为ES5{ loader: 'babel-loader', options: { "presets": ["@babel/preset-env"] } }]},{test:/\.(png|gif|jpg)$/i,use:[{loader:'url-loader',options:{name:'images/[name].[ext]',limit:20000,publicPath:'../'}}]}]},plugins: [new htmlWebpackPlugin({filename: 'index.html',template: './src/template/index.html',title: 'this is webpack title'}),extractCSS]
};
复制代码

说明: limit:20000:图片大于20000byte 使用文件(file-loader),小于20000byte使用base64

执行打包命令 npm run webpack

dist目录结构

dist
├── css
│   └── main-14de64958860a5cb4e2a.css
├── index.html
└── js└── main-14de64958860a5cb4e2a.js
复制代码

打开 main-14de64958860a5cb4e2a.css文件,图片已经被处理为base64

访问dist/index.html

浏览器效果

总结

file-loader

插件npm install --save-dev file-loader

添加rules规则

{test:/\.(png|gif|jpg)$/i,use:[{loader:'file-loader',options:{name:'images/[name].[ext]', //图片名称publicPath:'../' //相对于当前引入的文件的路径}}]
}
复制代码

url-loader

插件npm install --save-dev file-loader

添加rules规则

{test:/\.(png|gif|jpg)$/i,use:[{loader:'url-loader',options:{name:'images/[name].[ext]', //图片名称limit:20000, //图片大于20000byte 使用文件(file-loader),小于20000byte使用base64publicPath:'../' //相对于当前引入的文件的路径}}]
}
复制代码

思考:生产模式下,css文件和js文件越小越好,因此需要压缩;开发模式,css文件和js文件,则不需要压缩;怎么分开打包区分两种模式呢?

请看webpack4.x实战七,生产模式和开发模式分开打包

转载于:https://juejin.im/post/5cd6fe7af265da03ae74e038

webpack4.x实战六,处理图片相关推荐

  1. Java并发编程原理与实战六:主线程等待子线程解决方案

    Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...

  2. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  3. istio 实战 六 全链路监控 - Jaeger

    系列文章 istio 实战 一 Kubernetes 中快速搭建 istio istio 实战 二 bookinfo 部署 istio 实战 三 智能路由 istio 实战 四 权重路由以及监控 is ...

  4. STM32实战六 PWM加移相正交

    这一章编写PWM程序,使用TIM3以两个通道,完全映射到PC6和PC7,除普通PWM输出外,增加移相正交PWM功能,为后面的编码器计数模式提供信号源. PWM.h #ifndef __PWM__ #d ...

  5. OpenCV C++案例实战六《绿幕视频背景替换》

    OpenCV C++案例实战六<绿幕视频背景替换> 前言 一.图像预处理 二.HSV色彩空间转换 1. cvtColor色彩空间转换 2. inRange抠图 三.背景替换 四.源码 总结 ...

  6. SpringBoot+MyBatis+MYSQL项目实战六(新增收货地址)

    SpringBoot+MyBatis+MYSQL项目实战六(新增收货地址) 项目源码地址:电脑商城实战 点击新增收货地址 一:新增收货地址--数据表的创建 CREATE TABLE t_address ...

  7. OpenVINO 2022.3实战六:NNCF 实现 YOLOv5 模型 INT8 量化

    OpenVINO 2022.3实战六:NNCF 实现 YOLOv5 模型 INT8 量化 1 将YOLOv5模型转换为OpenVINO IR 使用OpenVINO模型优化器将YOLOv5模型转换为Op ...

  8. SpringSecurity权限管理系统实战—六、SpringSecurity整合JWT

    文章目录 系列目录 前言 一.无状态登录 二.JWT介绍 1.什么是jwt 头部(Header) 载荷(Payload) 签名(Signature) 2.JWT工作流程 3.简单实现 三.整合JWT ...

  9. miniFTP项目实战六

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

  10. webpack4打包实战

    一.模块化打包工具的由来 ES Module存在环境兼容问题,通过模块化方式划分的模块较多,网络请求频繁,在前端应用开发中不仅仅需要JavaScript代码需要模块化,随着应用的日益复杂,html,c ...

最新文章

  1. 静态方法多次调用内存_java虚拟机的内存分析
  2. 《实施Cisco统一通信VoIP和QoS(CVOICE)学习指南(第4版)》一导读
  3. 服务器中同一个【ip:port】可以多次accept的问题
  4. 关于int main(int argc,char *argv[])
  5. 传感与检测实验报告,差动变压器的特性测定,江南大学物联网自动化
  6. SELinux入门:了解和配置SELinux
  7. c++ vscode 第三方库_请教下,vscode中怎么编译带第三方库的文件呢?谢谢! - C++程序设计语言 - CPlusPlus - 水木社区...
  8. Linux系统下通过命令行对mysql数据进行备份和还原
  9. mysql数据表备份_MySQL数据库备份之逻辑备份和物理备份概述
  10. python正则表达边界_Python之正则表达式
  11. arcgis 中北京1954 高斯克吕格投影说明
  12. C语言联合体基本内容
  13. 戴尔服务器找不到启动盘,解决戴尔笔记本重装系统找不到引导或硬盘启动项方法...
  14. 计算机垃圾清理指令,win7电脑清理垃圾的运行命令代码是什么
  15. 操作系统:第一章,第二章总结
  16. Java与es8实战之二:Springboot集成es8的Java Client
  17. 中国ACM橡胶市场调研与投资预测报告(2022版)
  18. Android---使用adb命令添加apk到MUMU安卓模拟器
  19. 你创建微信公众账号了吗?别闲着,来做微信营销吧
  20. 长链剖分 总结 【知识点】

热门文章

  1. xftp找不到匹配的outgoing encryption 算法 怎么解决
  2. 判断坐标在矩阵的哪个(资源带)圈范围
  3. angular学习之路(一)
  4. HTTP 笔记与总结(6)referer 头与防盗链
  5. 【Windows 8 Store App】学习三:HTTP
  6. 【OpenCV入门指南】第八篇 灰度直方图
  7. Mac如何修改文件默认打开方式?
  8. 如何使用PDF expert在Mac上给PDF调整页面顺序?
  9. Baby Audio Smooth Operator for Mac(智能信号平衡器插件)
  10. PPDuck3 for Mac(pp鸭图片批量压缩工具)最新官方版免下载