当前位置: 首页 > article >正文

webpack处理图片资源

过去在Webpack4时,我们处理图片资源通过file-loader和url-loader进行处理。

现在Webpack5已经将两个Loader功能内置到Webpack里了,我们只需要简单配置即可处理图片资源。

1. 配置

//webpack.config.js
const path = require("path");

module.exports = {
  // 入口【相对路径】
  entry: './src/main.js',
  // 输出
  output: {
    // 文件的输出路径【绝对路径】
    // __dirname 当前文件的文件夹的绝对路径
    path: path.resolve(__dirname, 'dist'),
    // 文件的输出名称
    filename: 'main.js'
  },
  // 加载器
  module: {
    rules: [
      // loader 的配置
      // css样式
      {
        test: /\.css$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
        ]
      },
      // less样式
      {
        test: /\.less$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
          'less-loader',// 将less文件编译成css文件
        ]
      },
      // sass样式
      {
        test: /\.s[ac]ss$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
          'sass-loader',// 将sass文件编译成css文件
        ]
      },
      // stylus样式
      {
        test: /\.styl$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
          'stylus-loader',// 将Styl文件编译成css文件
        ]
      },
      {
        test: /\.(png|jpe?g|gif|webp|svg)$/,
        type: 'asset',
      }
    ]
  },
  // 插件
  plugins: [
    // plugin的配置
  ],
  /* 
    模式:
      开发模式:development
      生产模式:production
  */
  mode: "development"
}

2. 添加图片资源

3. 使用图片资源

  • src/less/index.less
    .box2 {
      width: 100px;
      height: 100px;
      background-image: url("../images/clean-window.jpeg");
      background-size: cover;
    }
  • src/sass/index.sass
    .box3
      width: 100px
      height: 100px
      background-image: url("../images/cleaning-service.png")
      background-size: cover
  • src/styl/index.styl
    .box5
      width 100px
      height 100px
      background-image url("../images/orders.gif")
      background-size cover

4. 运行指令

运行以下指令,然后打开index.html页面查看效果。

npx webpack

5. 输出资源情况

此时如果查看 dist 目录的话,会发现多了三张图片资源,因为 Webpack 会将所有打包好的资源输出到 dist 目录下。

为什么样式资源没有呢?

因为经过 style-loader 的处理,样式资源打包到main.js里面区了,所以没有额外输出出来。

6. 对图片资源进行优化

将小于某个大小的图片转化为data URL形式(Base64格式)

  • 优点:减少请求数量
  • 缺点:体积变得更大

此时当图片大小不超过10kb的图片就会以 data URL形式内置到js中了。

注意:需要将上次打包生成的文件清空,再重新打包才有效果。

const path = require("path");

module.exports = {
  // 入口【相对路径】
  entry: './src/main.js',
  // 输出
  output: {
    // 文件的输出路径【绝对路径】
    // __dirname 当前文件的文件夹的绝对路径
    path: path.resolve(__dirname, 'dist'),
    // 文件的输出名称
    filename: 'main.js'
  },
  // 加载器
  module: {
    rules: [
      // loader 的配置
      // css样式
      {
        test: /\.css$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
        ]
      },
      // less样式
      {
        test: /\.less$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
          'less-loader',// 将less文件编译成css文件
        ]
      },
      // sass样式
      {
        test: /\.s[ac]ss$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
          'sass-loader',// 将sass文件编译成css文件
        ]
      },
      // stylus样式
      {
        test: /\.styl$/i,// 只检测.css文件
        use: [// 执行顺序:从右到左,从下到上
          'style-loader',// 将js中css通过创建style标签添加到html文件中生效
          'css-loader',// 将css资源编译成commonjs的模块到js中
          'stylus-loader',// 将Styl文件编译成css文件
        ]
      },
      {
        test: /\.(png|jpe?g|gif|webp|svg)$/,
        type: 'asset',
        parser: {
          dataUrlCondition: {
            // 小于10kb的图片会转成base64
            // 优点:减少请求数量;缺点:体积会变大
            maxSize: 10 * 1024
          }
        }
      }
    ]
  },
  // 插件
  plugins: [
    // plugin的配置
  ],
  /* 
    模式:
      开发模式:development
      生产模式:production
  */
  mode: "development"
}

http://www.kler.cn/a/444261.html

相关文章:

  • harmony UI组件学习(1)
  • 【AI学习】Huggingface复刻Test-time Compute Scaling技术
  • Java图片拼接
  • 大数据面试题--企业面试真题
  • 数据结构漫游记:初识vector
  • Vue3组件封装技巧与心得
  • 【JavaEE进阶】关于Maven
  • macos控制台安装
  • C++ OpenGL学习笔记(1、Hello World空窗口程序)
  • 计算机网络-GRE Over IPSec实验
  • 递归读取指定目录下的文件
  • postman免登录步骤
  • AIGC:图像风格迁移技术实现猜想
  • 【多模态】MiniCPM-V多模态大模型使用学习
  • RTR Chaptor12
  • C语言基础:数组(字符数组)
  • url提取
  • HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例
  • 【原创教程】西门子1500TCP_UDP通信说明大全(下篇)
  • 【多模态实战】在本地计算机上使用小型视觉语言模型【VLM】进行目标计数【附源码】
  • Liblib上面下载的各种模型,如果使用comfy,如何确定其存放的位置?
  • 解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹
  • 基于asp.net游乐园管理系统设计与实现
  • 【论文阅读】从单张图像到高质量3D模型的快速生成方法
  • Kaggler日志--Day7
  • 无刷电机的概念