1、准备

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>webpack</title></head><body><div id="box1"></div><div id="box2"></div><div id="box3"></div><img src="./angular.jpg" alt="angular"></body></html>
#box1{width: 100px;height: 100px;background-image: url('./vue.jpg');background-repeat: no-repeat;background-size: 100% 100%;}#box2{width: 200px;height: 200px;background-image: url('./react.png');background-repeat: no-repeat;background-size: 100% 100%;}#box3{width: 300px;height: 300px;background-image: url('./angular.jpg');background-repeat: no-repeat;background-size: 100% 100%;}
import './index.less';
2、webpack.config.js
const { resolve } = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {entry: './src/index.js',output: {filename: 'built.js',path: resolve(__dirname, 'build')},module: {rules: [{test: /\.less$/,use: ['style-loader', 'css-loader', 'less-loader']},{// 问题:默认处理不了html中img图片// 处理图片资源test: /\.(jpg|png|gif)$/,//会将html引入的图片以 base64 编码并打包到文件中,最终只需要引入这个dataURL 就能访问图片了。loader: 'url-loader',options: {// 图片大小小于8kb,就会被base64处理// 优点: 减少请求数量(减轻服务器压力)// 缺点:图片体积会更大(文件请求速度更慢)limit: 8 * 1024,// 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs// 解析时会出问题:[object Module]// 解决:关闭url-loader的es6模块化,使用commonjs解析esModule: false,// 给图片进行重命名// [hash:10]取图片的hash的前10位// [ext]取文件原来扩展名name: '[hash:10].[ext]'}},{test: /\.html$/,// 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)loader: 'html-loader',options:{esModule:false,}}]},plugins: [new HtmlWebpackPlugin({template: './src/index.html'})],mode: 'development'};
3、结果

图片vue小于8k,被base64处理
