• webpack 之(10) css 提取,兼容,压缩


    生产环境:能让代码优化上线运行的环境

    提问:css打包在js文件中会出现什么情况?

    答:css在js中,这样js文件体积变得非常大,下载就会非常慢,因为是先加载js,先执行js代码,然后创建style标签加载在页面中,那么页面就会出现闪屏现象,所以需要将css文件内容从js中提取出来

    需要做哪些优化:

    1/将css抽离出来

    2/统一对代码进行压缩

    3/部分样式问题和js存在兼容性问题

    这样做的好处

    1/能够让代码更快的运行,性能更好

    2/能够让代码在各个浏览器中平稳的运行,不出现问题

    注意命令webpack  和 npx webpack-dev-server的区别 

      webpack:用于打包

      npx webpack-dev-server:用于编译打包,没有输出

    提取

    重点内容:

     需要安装包: npm i mini-css-extract-plugin 

     在module的rules部分,对css的处理,需要去掉style-loader 变为 MiniCssExtractPlugin.loader

    可以通过new MiniCssExtractPlugin({ filename:'css/built.css' }) 进行重命名,默认是 main.css文件

     "css-loader": "^5.2.4",
        "file-loader": "^6.2.0",
        "html-webpack-plugin": "^5.3.1",
        "mini-css-extract-plugin": "^1.5.0",
        "style-loader": "^2.0.0",
        "url-loader": "^4.1.1"
    const {resolve} = require('path')
    const HtmlWebpackPlugin  = require('html-webpack-plugin')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    module.exports = {
      entry:'./src/js/index.js',
      output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
      },
      module:{
        rules:[
          {
            test:/.css$/,
            use:[
              //创建style标签,将样式放入
              // 'style-loader',
              //这个loader取代style-loader.作用:提取css成单独文件
              MiniCssExtractPlugin.loader,
              //将css文件整合到js文件中
              'css-loader']
          }
        ]
      },
      plugins:[
        new HtmlWebpackPlugin({
          template:'./src/index.html'  //将复制该文件打包到新的文件中
        }),
        new MiniCssExtractPlugin({
          //对输出文件进行重命名
          filename: 'css/built.css'
        })
      ],
      mode:'development'
    }

    兼容

    注意点:

       需要和webpack.config.js同级添加一个postcss.config.js文件,因为以前的写法不支持了(看下面内容)

       同时用得到了 postcss-loader 和 postcss-preset-env 插件

       需要在package.json中配置css的兼容处理browserslist

    {
      "name": "09tiqucss",
      "version": "1.0.0",
      "description": "",
      "main": "webpack.config.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "css-loader": "^5.2.4",
        "file-loader": "^6.2.0",
        "html-webpack-plugin": "^5.3.1",
        "mini-css-extract-plugin": "^1.5.0",
        "postcss-loader": "^5.2.0",
        "postcss-preset-env": "^6.7.0",
        "style-loader": "^2.0.0",
        "url-loader": "^4.1.1"
      },
      "browserslist": {
        "development": [
          "last 1 chrome version",
          "last 1 firefox version",
          "last 1 safari version"
        ],
        "production": [
          ">0.2%",
          "not dead",
          "not op_mini all"
        ]
      }
    }
    const {resolve} = require('path')
    const HtmlWebpackPlugin  = require('html-webpack-plugin')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    
    //设置node环境变量,这一句不写就是默认生产环境
    process.env.NODE_ENV = 'development'
    
    module.exports = {
      entry:'./src/js/index.js',
      output:{
        filename:'js/built.js',
        path:resolve(__dirname,'build')
      },
      module:{
        rules:[
          {
            test:/.css$/,
            use:[
              //创建style标签,将样式放入
              // 'style-loader',
              //这个loader取代style-loader.作用:提取css成单独文件
              MiniCssExtractPlugin.loader,
              //将css文件整合到js文件中
              'css-loader',
              /* 
              css兼容性处理: postcss --> postcss-loader  postcss-preset-env(插件) 
              这个插件帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式
              "browserslist":{
                //开发环境 -->设置node环境变量:process.env.NODE_ENV = development
                "development":[
                  "last 1 chrome version", //最近的chrome浏览器
                  "last 1 firefox version",//最近的firefox浏览器W
                  "last 1 safari version" //最近的safari浏览器
                ],
                //生产环境:默认是看生产环境的,与下面的 mode:development 无关
                "production":[
                  ">0.2%",   //表示所有的浏览器了
                  "not dead", //不要死了的浏览器 ie10
                  "not op_mini all" //不要欧鹏的浏览器
    
                ]
              }
              */
              /* 
              使用loader的默认配置 
              'postcss-loader'
              修改loader的配置(如下)
              */
              {
                loader:'postcss-loader',
              /*  
               //不支持这种写法,而是抽离成postcss.config.js文件,抽离的文件是不需要任何引入的
                options:{
                  ident:'postcss',
                  plugins: () => [
                    require('postcss-preset-env')()
                  ]
                } */
              }
            ]
          }
        ]
      },
      plugins:[
        new HtmlWebpackPlugin({
          template:'./src/index.html'  //将复制该文件打包到新的文件中
        }),
        new MiniCssExtractPlugin({
          //对输出文件进行重命名
          filename: 'css/built.css'
        })
      ],
      mode:'development'
    }

    压缩

    添加一个插件即可进行压缩

    const OptimizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')

    在webpack.config.js文件中的plugins属性

    plugins:[
      //默认配置就足够进行压缩了
      new OptimizeCssAssetsWebpackPlugin()
    ]
  • 相关阅读:
    查找整数
    寒假作业3
    寒假作业2
    寒假作业1
    秋季学期总结
    对自己影响最深的三位老师
    自我介绍
    jquery学习笔记
    素材网站
    转:vim模式下报错E37: No write since last change (add ! to override)
  • 原文地址:https://www.cnblogs.com/zmztya/p/14710813.html
Copyright © 2020-2023  润新知