webpapck打包css

92 阅读2分钟

微信截图_20220403165030.png 一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第N天,点击查看活动详情

单独提取css

为什么需要单独打包css呢?

将css文件单独提取出来,那么就可以先在页面的最前面引入这个单独的css文件,浏览器先解析了css文件就会生成cssom从而与dom tree生成渲染树从而以最快速度渲染出页面(为什么要将css文件放在头部)。如果放在js文件中,不仅会增加js文件体积,使js文件的下载时间延长,而且进行解析js文件往往都是在dom树生成之后,那么这两者增加的延迟会大大影响渲染速度,削弱用户体验。

  • 需要下载插件npm i mini-css-extract-plugin -D

  • 作用:取代style-loader提取js中的css成单独的文件,可以减小js体积

创建webpack.config.js:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const {resolve} = require('path')
module.exports = {
  entry:'./src/js/index.js',
  output:{
    filename:'js/built.js',
    path:resolve(__dirname,'build')
  },
  module:{
    rules:[
      {
        test:/\.css$/,
        use:[
          MiniCssExtractPlugin.loader,
          'css-loader'
        ]
      }
    ]
  },
  plugins:[
    new HtmlWebpackPlugin({
      template:'./src/index.html'
    }),
    new MiniCssExtractPlugin({
      //对输出的文件进行重新命名
      filename:'css/built.css'
    })
  ],
  mode:'development'
}

上面的不需要加上style-loader,因此他的作用是把样式插入到head中,但是这里我们需要单独分离css。

打包之后可以看到生成了单独的css文件:

微信截图_20220403163748.png

css兼容性处理

开发中可能会遇到css在不同浏览器的兼容性问题,对此可以使用插件来进行处理。

先创建css写入样式如下: 微信截图_20220403164608.png

需要先安装:npm i postcss-loader postcss-preset-env -D

在webpack.config.js中配置:

//...相同部分

// 设置nodejs环境变量
process.env.NODE_ENV = 'production';

module.exports = {
 //...相同部分
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          // 修改loader的配置
          {
            loader: 'postcss-loader',
                ident: 'postcss',
                options: {
                postcssOptions: {
                    //或者将插件引入写在单独的配置js中
                    //config: './config/postcss.config.js',
                    plugins:  [
                        require('postcss-preset-env')()
                    ]
                }
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html'
    }),
    new MiniCssExtractPlugin({
      filename: 'css/built.css'
    })
  ],
  mode: 'development'
};

另外还需要在package.json中进行如下配置来帮助我们识别哪些浏览器需要做兼容性处理,如下:

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

执行命令webpack就可以看到打包完的css中自动帮助我们加上了前缀:

微信截图_20220403164557.png


以上内容是本人在学习webpack中踩到的一些坑,希望可以帮助到大家~