webpack处理图片资源

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

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

1. 配置

javascript 复制代码
//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

    css 复制代码
    .box2 {
      width: 100px;
      height: 100px;
      background-image: url("../images/clean-window.jpeg");
      background-size: cover;
    }
  • src/sass/index.sass

    css 复制代码
    .box3
      width: 100px
      height: 100px
      background-image: url("../images/cleaning-service.png")
      background-size: cover
  • src/styl/index.styl

    css 复制代码
    .box5
      width 100px
      height 100px
      background-image url("../images/orders.gif")
      background-size cover

4. 运行指令

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

css 复制代码
npx webpack

5. 输出资源情况

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

为什么样式资源没有呢?

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

6. 对图片资源进行优化

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

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

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

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

javascript 复制代码
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"
}
相关推荐
霍理迪2 小时前
CSS盒模型布局规则
前端·javascript·css
千寻girling2 小时前
面试官: “ 说一下 JS 中什么是事件循环 ? ”
前端·javascript
程序员龙语2 小时前
CSS 高级选择器应用
前端·css
Cassie燁2 小时前
el-table源码解读2-2——createStore()初始化方法
前端·javascript·vue.js
程序员修心2 小时前
CSS文本样式全解析:11个核心属性详解
前端·css
旧梦吟3 小时前
脚本网站 开源项目
前端·web安全·网络安全·css3·html5
北极糊的狐3 小时前
按钮绑定事件达成跳转效果并将树结构id带入子页面形成参数完成查询功能并将返回的数据渲染到页面上2022.5.29
前端·javascript·vue.js
幽络源小助理3 小时前
幽络源二次元分享地址发布页源码(HTML) – 源码网免费分享
前端·html
全栈前端老曹3 小时前
【ReactNative】页面跳转与参数传递 - navigate、push 方法详解
前端·javascript·react native·react.js·页面跳转·移动端开发·页面导航
用泥种荷花4 小时前
【前端学习AI】Python环境搭建
前端