2

问题:webpack默认处理不了图片资源

一:图片分类:

1 css background-image: url('xxx.png');
2 html <img src="xxx.png">

二:打包css 图片

1 下载 url-loader file-loader
npm i url-loader file-loader -D

三:打包html通过img使用图片

1 下载 html-loader

四:在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$/,
      // 要使用多个loader处理用use
      use: ['style-loader', 'css-loader', 'less-loader']
    },
    {
      // 问题:默认处理不了html中img图片
      // 处理图片资源
      test: /\.(jpg|png|gif)$/,
      // 使用一个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'
};

注意:

  • 虽然 没有配置file-loader,是因为url-loader 包含file-loader,当图片资源小于limit配置时,会以url-loader打包经过base64打包图片,优点减少http请求,大于limit配置时,会以file-loader打包图片资源

带你入门前端
38 声望2 粉丝

通俗易懂,言简意赅授课