0
点赞
收藏
分享

微信扫一扫

解决 webpack5 打包 css 背景图片问题

热爱生活的我一雷广琴 2022-03-31 阅读 60
webpack
  1. 现在我在src/css/style.css文件中,设置全局的图片:

    /* 设置一张背景图片 */
    
    body {
      background: url('../img/image.jpg');
    }
    
  2. index.js文件中引入该css文件:

    // 导入 css 文件
    import './css/style.css'
    
    
  3. 来看webpack.config.js的配置:

    // 导入 path 的 resolve 模块,进行路径拼接
    const { resolve } = require('path');
    
    // 导出 webpack 的配置对象,注意只能使用 CommonJS 的导出方式
    module.exports = {
      // 入口文件
      entry: './src/index.js',
      // 出口文件
      output: {
        // 打包到的目标地址,注意是绝对路径
        path: resolve(__dirname, './build'),
        // 打包出去的文件名
        filename: 'bundle.js'
      },
      // 配置模块
      module: {
        // 配置规则
        rules: [
          // 配置 css-loader
          {
            test: /\.css$/,
            use: [
              'style-loader',
              'css-loader'
            ]
          },
          // 配置 file-loader
          {
            test: /\.(jpe?g|png|gif|svg)$/i,
            use: {
              loader: 'file-loader'
            }
          }
        ]
      }
    }
    
    
  4. 打包后,页面根本不显示图片,这个原因是url-loader、file-loader都是采用es6语法规范的,而不是commonjs规范,由于url-loader、file-loader中可以通过esModule属性来选择是否关闭es6语法规范。其实官网也说了在webpack5中也不再推荐使用file-loader、url-loader,但是任然想使用这两个loader打包css背景图片的话,需要在webpack.config.js文件中做如下配置:

    // 导入 path 的 resolve 模块,进行路径拼接
    const { resolve } = require('path');
    
    // 导出 webpack 的配置对象,注意只能使用 CommonJS 的导出方式
    module.exports = {
      // 入口文件
      entry: './src/index.js',
      // 出口文件
      output: {
        // 打包到的目标地址,注意是绝对路径
        path: resolve(__dirname, './build'),
        // 打包出去的文件名
        filename: 'bundle.js'
      },
      // 配置模块
      module: {
        // 配置规则
        rules: [
          // 配置 css-loader
          {
            test: /\.css$/,
            use: [
              'style-loader',
              'css-loader'
            ]
          },
          // 配置 file-loader
          {
            test: /\.(jpe?g|png|gif|svg)$/i,
            use: {
              loader: 'file-loader',
              options: {
                esModule: false
              }
            },
            type: 'javascript/auto'
          }
        ]
      }
    }
    
  5. 最主要的就是两段代码配置:esModule: falsetype: 'javascript/auto',这个配置适用于file-loader和url-loader

举报

相关推荐

0 条评论