webpack—css样式资源的处理

173 阅读1分钟

常用loader

less-loader、sass-loader

sass-loader和less-loader把sass、less打包成输出css文件

css-loader

将css文件变成commonjs模块加载到js中,里面内容是样式字符串(就是变成js字符串,通过commonjs方式引入)

style-loader

创建style标签,将js中的样式资源插入进行,添加到head中生效

module.exports = {
    module: {
        rules: [
          // 详细loader配置
          // 不同文件必须配置不同loader处理
          {
            // 匹配哪些文件
            test: /\.css$/,
            // 使用哪些loader进行处理
            use: [
              // use数组中loader执行顺序:从右到左,从下到上 依次执行
              // 创建style标签,将js中的样式资源插入进行,添加到head中生效
              'style-loader',
              // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
              'css-loader'
            ]
          },
          {
            test: /\.less$/,
            use: [
              'style-loader',
              'css-loader',
              // 将less文件编译成css文件
              // 需要下载 less-loader和less
              'less-loader'
            ]
          }
        ]
    }
}

常用插件

mini-css-extract-plugin插件

取代style-loader。作用:提取js中的css成单独文件

MiniCssExtractPlugin的使用

const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              // 创建style标签,将样式放入
              // 'style-loader', 
              // 这个loader取代style-loader。作用:提取js中的css成单独文件
              MiniCssExtractPlugin.loader,
              // 将css文件整合到js文件中
              'css-loader'
            ]
          }
        ]
      },
      plugins: [
        new MiniCssExtractPlugin({
          // 对输出的css文件进行重命名
          filename: 'css/built.css'
        })
      ]
    }
}

css 压缩

OptimizeCssAssetsWebpackPlugin

const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          {
            loader: 'postcss-loader',
            options: {
              ident: 'postcss',
              plugins: () => [
                // postcss的插件
                require('postcss-preset-env')()
              ]
            }
          }
        ]
      }
    ]
  },
  plugins: [
    // 压缩css
    new OptimizeCssAssetsWebpackPlugin()
  ]
};

css兼容性处理

css兼容性处理:postcss --> postcss-loader postcss-preset-env

帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式

package.json配置

"browserslist": {
  // 开发环境 --> 设置node环境变量:process.env.NODE_ENV = development
  "development": [
    "last 1 chrome version",
    "last 1 firefox version",
    "last 1 safari version"
  ],
  // 生产环境:默认是看生产环境
  "production": [
    ">0.2%",
    "not dead",
    "not op_mini all"
  ]
}

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              // 创建style标签,将样式放入
              // 'style-loader', 
              // 这个loader取代style-loader。作用:提取js中的css成单独文件
              MiniCssExtractPlugin.loader,
              // 将css文件整合到js文件中
              'css-loader',
              {
                loader: 'postcss-loader',
                options: {
                  ident: 'postcss',
                  plugins: () => [
                    // postcss的插件
                    require('postcss-preset-env')()
                  ]
                }
              }
            ]
          }
        ]
      },
      plugins: [
        new MiniCssExtractPlugin({
          // 对输出的css文件进行重命名
          filename: 'css/built.css'
        })
      ]
    }
}