webpack-cli 4.0的版本和 webpack-dev-server 3.11.0的版本不兼容,只能用webpack@5.0 + webpack-cli@3.3.12 + webpack-dev-server@3.11.0 的环境。

url-loader 是在 file-loader 的基础上再次开发的。所以 url-loader 依赖 file-loader

应为loader的执行是从下到上,从右到左的。所以 url-loader 要配置在前面。 img-loader 要配置在 url-loader 的后面。

项目demo : https://github.com/cisbest/webpack5-demo-img

依赖的模块(package.json)

    "devDependencies": {
"clean-webpack-plugin": "^3.0.0",
"css-loader": "^4.3.0",
"file-loader": "^6.1.1",
"html-webpack-plugin": "^4.5.0",
"imagemin": "^7.0.1",
"imagemin-gifsicle": "^7.0.0",
"imagemin-mozjpeg": "^9.0.0",
"imagemin-pngquant": "^9.0.1",
"imagemin-svgo": "^8.0.0",
"img-loader": "^3.0.2",
"mini-css-extract-plugin": "^1.0.0",
"url-loader": "^4.1.1",
"webpack": "^5.0.0",
"webpack-cli": "^3.3.12",
"webpack-dev-server": "^3.11.0"
}

项目结构

    webpack5-demo-img
| package.json
| webpack.config.js
|
+---public
| favicon.ico
| index.html
|
+---src
| | main.css
| | main.js
| |
| \---assets
|
\---test-build-serve
| app.js
| package.json
|
\---static

在js中使用图片

// main.js
import "./main.css"; // 在js中使用图片
import mayi from "./assets/mayi.jpeg";
let MAYI = new Image();
MAYI.src = mayi;
document.getElementById("js-img").appendChild(MAYI);

webpack配置文件

// webpack.config.js
const webpack = require("webpack");
const path = require("path");
const htmlWebpackPlugin = require("html-webpack-plugin"); // 生成.html文件的插件
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); // 把样式提取为单独的css文件 的插件
const { CleanWebpackPlugin } = require("clean-webpack-plugin"); // 清除构建目录的插件
module.exports = {
entry: "./src/main.js", // 打包入口文件
mode: "development", // 使用开发模式
devServer: {
// 本地服务器代理
contentBase: path.join(__dirname, "./test-build-serve/static"), //指定在哪个目录下找要加载的文件
compress: true,
port: 8080, // 配置端口
hot: true, // 配置热更新
},
plugins: [
new MiniCssExtractPlugin({
filename: "[name].css",
ignoreOrder: false,
}),
new htmlWebpackPlugin({
favicon: "./public/favicon.ico",
filename: "index.html",
template: "./public/index.html",
}),
new CleanWebpackPlugin(),
],
module: {
rules: [
{
test: /\.css$/,
use: [MiniCssExtractPlugin.loader, "css-loader"], // 处理css的loader
},
{
test: /\.(gif|png|jpe?g)$/i,
use: [
{
// 用 url-loader 处理图片
loader: "url-loader", // url-loader 依赖于 file-loader 要使用url-loader必须安装file-loader
options: {
name: "[name].[hash:16].[ext]", // 文件名.hash.文件扩展名 默认格式为[hash].[ext],没有文件名
limit: 1024 * 8, // 将小于8KB的图片转换成base64的格式
outputPath: "assets/imgs", // 为你的文件配置自定义 output 输出目录 ; 用来处理图片路径问题
publicPath: "assets/imgs", // 为你的文件配置自定义 public 发布目录 ; 用来处理图片路径问题
},
},
{
// 用 img-loader 压缩图片
loader: "img-loader",
options: {
plugins: [
require("imagemin-pngquant")({
//压缩 png 的插件
speed: 4, // 取值范围 1-11 值越大压缩率越小 ,值越小压缩生成的文件越小 默认为4
}),
require("imagemin-gifsicle")({
// 压缩 gif 插件
optimizationLevel: 1, // 取值范围 1、2、3 默认1 3极限压缩,压缩和图片效果不好,使用默认1就行
}),
require("imagemin-mozjpeg")({
// 压缩 jpg 插件
quality: 50, // 1-100 值越大压缩率越小 ,值越小压缩生成的文件越小
}),
],
},
},
],
},
],
},
output: {
path: path.join(__dirname, "./test-build-serve/static"),
filename: "app.[hash:16].js",
publicPath: "/", // 也可以用来处理路径问题,加在所有文件路径前的根路径
},
};

imagemin-mozjpegimagemin-gifsicleimagemin-pngquant 依赖 imagemin

url-loader参考: https://www.webpackjs.com/loaders/url-loader/ https://www.npmjs.com/package/url-loader

file-loader参考: https://www.webpackjs.com/loaders/file-loader/ https://www.npmjs.com/package/file-loader

img-loader参考: https://www.npmjs.com/package/img-loader

imagemin-mozjpeg配置项参考: https://www.npmjs.com/package/imagemin-mozjpeg

imagemin-gifsicle配置项参考: https://www.npmjs.com/package/imagemin-gifsicle

imagemin-pngquant配置项参考: https://www.npmjs.com/package/imagemin-pngquant

webpack5用url-loader(file-loader)处理图片和img-loader压缩图片的更多相关文章

  1. file上传图片,base64转换、压缩图片、预览图片、将图片旋转到正确的角度

    /** * 将base64转换为文件对象 * (即用文件上传输入框上传文件得到的对象) * @param {String} base64 base64字符串 */ function convertBa ...

  2. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...

  3. java中URL和File的相互转化

    首先,想比较一下这两者的不同.URL用于网络,所以带有明显的protocol,而且对于中文及符号支持的很不好.File就是我们平常系统中的文件路径了,对于中文及符号都支持,但是已经没有protocol ...

  4. YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe

    test.py import os import sys sys.path.append(])+'/lib/lib3.7') import yaml with open("default.y ...

  5. this.getClass().getResource("") url path file 区别

    首先注意 "/word/appointDismiss.docx" 前面一定要加 /,有一次我就是忘记加/ 查了半天错, 不能写成 "word/appointDismiss ...

  6. YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. data = yaml.load(file_data)

    YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsa ...

  7. 11 loader - 配置处理scss文件的loader

    1.装包 cnpm i sass-loader -D peerDependencies WARNING sass-loader@* requires a peer of node-sass@^4.0. ...

  8. 10 loader - 配置处理less文件的loader

    第一步:装包 cnpm i less-loader -D 安装完提示警告 peerDependencies WARNING less-loader@* requires a peer of less@ ...

  9. Jquery获取输入框属性file,ajax传输后端,下载图片

    Django web开发获取input属性file,可以用request.FILES.get(' ')直接获取到,然后正常拼接路径就可以下载, 但是今天我们来用异步获取file的值在传输后端下载. 1 ...

  10. file does not exist 阿里云OSS图片上传遇到的问题

    ./uploads\20171209/0497b8dd16e72c6fcf5bfd552f535a81.png file does not exist 原代码 function aliyun($sav ...

随机推荐

  1. lua 控制语句

    for循环 模式1 for k,v in f, data, init_k do end 进行的操作是 f(data, old_k), 例如f(data, init_k) 渴望返回的是 new_k, v ...

  2. 字符串(str)内置方法补充、列表(list)内置方法、可变类型与不可变类型、队列和栈

    目录 一.字符串(str)的内置方法(补充) 了解方法 二.列表(list)的内置方法 三.可变类型与不可变类型 四.队列和栈 一.字符串(str)的内置方法(补充) # upper()把当前字符串中 ...

  3. JS逆向实战11——某金属集团动态cookie加密

    本文来自:来自: https://www.cnblogs.com/zichliang/ 目标网站 aHR0cDovL3d3dy50bm1nLmNvbS5jbi9pbmZvcm1hdGlvbi9pbmZ ...

  4. 磁盘有限,Docker 垃圾很多怎么办

    你的电脑上可能 pull 或者 build 了很多 Docker 镜像,但是你不知道怎么清理,本文将介绍如何清理 Docker 垃圾的常见方法. docker prune 你可以通过原生的多种 pru ...

  5. JZOJ 3293. 【SHTSC2013】阶乘字符串

    \(\text{Problem}\) 给定一个由前 \(n\) 个小写字母组成的串 \(S\). 串 \(S\) 是阶乘字符串当且仅当前 \(n\) 个小写字母的全排列(共 \(n!\) 种)都作为 ...

  6. BI工具术语表大全:从字母A-Z全面收录

    谈到商业智能行业,变革是不可避免的.为了跟上步伐,各种各样的BI 解决方案正在快速迭代更新,以满足企业的数字化需求,那么市场上BI 工具种类繁杂,到底如何选择适合功能全面.满足自己企业运转情况的.合适 ...

  7. Vue 关键概念介绍

    Vue现在已经迭代到 3+ 版本,阅读官方文档的过程中发现作者的一些理念和思路很合我口味,很多概念与方案都是基于解决实际问题提出并实现的,且在权衡利弊后勇于打破常规,比如如何看待关注点分离?.可见,V ...

  8. 使用 Three.js 的 3D 制作动画场景

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 由于 GSL 语法的复杂性,对于许多开发人员来说 WebGL 是一个未知的领域.但是有了 Three.js,在浏览器中 3D 的实现变得简单.下 ...

  9. Cesium之基础控件

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  10. 基于Python的OpenGL 04 之变换

    1. 概述 本文基于Python语言,描述OpenGL的变换 前置知识可参考: 基于Python的OpenGL 03 之纹理 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里 ...