1.使用npm下载组件
npm i file-loader -D
npm i url-loader -D
npm i html-loader -D
2.配置webpack.config.js文件
const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: './src/index.js', output: { filename: 'build.js', path: resolve(__dirname, 'build'), publicPath: './'//webpack5 需要加入此行设置!!!!!!! }, module: { rules: [ { test: /\.less$/, // 要使用多个loader处理用use use: ['style-loader', 'css-loader', 'less-loader'] }, { // 问题:默认处理不了html中img图片 // 处理图片资源 test: /\.(jpg|png|gif|JPG)$/, // 使用一个loader // 下载 url-loader file-loader 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' } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src/index.html' }) ], mode: 'development' };
3.准本3张图片
angular.jpg
react.png
vue.jpg
4.编写相关文件
index.less
#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%; }
index.js
import './index.less'
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="box1"></div> <div id="box2"></div> <div id="box3"></div> </body> </html>
5.执行webpack打包命令
webpack
6.生成build.js和index.html文件
新生成的index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="box1"></div> <div id="box2"></div> <div id="box3"></div> <script src="./build.js"></script></body> </html>
页面效果: