1、准备

image.png

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>webpack</title>
  7. </head>
  8. <body>
  9. <div id="box1"></div>
  10. <div id="box2"></div>
  11. <div id="box3"></div>
  12. <img src="./angular.jpg" alt="angular">
  13. </body>
  14. </html>
  1. #box1{
  2. width: 100px;
  3. height: 100px;
  4. background-image: url('./vue.jpg');
  5. background-repeat: no-repeat;
  6. background-size: 100% 100%;
  7. }
  8. #box2{
  9. width: 200px;
  10. height: 200px;
  11. background-image: url('./react.png');
  12. background-repeat: no-repeat;
  13. background-size: 100% 100%;
  14. }
  15. #box3{
  16. width: 300px;
  17. height: 300px;
  18. background-image: url('./angular.jpg');
  19. background-repeat: no-repeat;
  20. background-size: 100% 100%;
  21. }
  1. import './index.less';

2、webpack.config.js

  1. const { resolve } = require('path');
  2. const HtmlWebpackPlugin = require('html-webpack-plugin');
  3. module.exports = {
  4. entry: './src/index.js',
  5. output: {
  6. filename: 'built.js',
  7. path: resolve(__dirname, 'build')
  8. },
  9. module: {
  10. rules: [
  11. {
  12. test: /\.less$/,
  13. use: ['style-loader', 'css-loader', 'less-loader']
  14. },
  15. {
  16. // 问题:默认处理不了html中img图片
  17. // 处理图片资源
  18. test: /\.(jpg|png|gif)$/,
  19. //会将html引入的图片以 base64 编码并打包到文件中,最终只需要引入这个dataURL 就能访问图片了。
  20. loader: 'url-loader',
  21. options: {
  22. // 图片大小小于8kb,就会被base64处理
  23. // 优点: 减少请求数量(减轻服务器压力)
  24. // 缺点:图片体积会更大(文件请求速度更慢)
  25. limit: 8 * 1024,
  26. // 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
  27. // 解析时会出问题:[object Module]
  28. // 解决:关闭url-loader的es6模块化,使用commonjs解析
  29. esModule: false,
  30. // 给图片进行重命名
  31. // [hash:10]取图片的hash的前10位
  32. // [ext]取文件原来扩展名
  33. name: '[hash:10].[ext]'
  34. }
  35. },
  36. {
  37. test: /\.html$/,
  38. // 处理html文件的img图片(负责引入img,从而能被url-loader进行处理)
  39. loader: 'html-loader',
  40. options:{
  41. esModule:false,
  42. }
  43. }
  44. ]
  45. },
  46. plugins: [
  47. new HtmlWebpackPlugin({
  48. template: './src/index.html'
  49. })
  50. ],
  51. mode: 'development'
  52. };

3、结果

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