webpack5配置CSS

webpack只能解析js,需要依赖相关loader进行解析css

css

css-loader:负责将 Css 文件编译成 Webpack 能识别的模块
style-loader:会在输出文件中动态创建一个 Style标签,以模块化的形式输出Css内容

npm i css-loader style-loader -D
module:{
        rules:[
            {
                test:/\.css$/,
                use:['style-loader','css-loader']
            }
        ]
    }

less

less-loader:负责将 less 文件编译成 Css 文件

npm i less-loader -D
module:{
        rules:[
            {
                test:/\.css$/,
                use:['style-loader','css-loader','less-loader']
            }
        ]
    }

sass/scss

sass-loader:负责将 sass 文件编译成 css 文件
sass:sass-loader 依赖 sass 进行编译

npm i sass-loader sass -D
 module: {
    rules: [
      {
        test: /\.s[ac]ss$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
    ],
  },

stylus

stylus-loader:负责将 styl 文件编译成 css 文件

npm i stylus-loader -D
  module: {
    rules: [
      {
        test: /\.styl$/,
        use: ["style-loader", "css-loader", "stylus-loader"],
      },
    ],
  },

页面闪屏问题

因为style-loader是把css文件打包在了输出的js文件中,也就是必须这个js文件请求完才会在页面上看到效果,所以在请求js的过程中如果延时比较久,页面会出现暂时样式丢失导致的闪屏情况。

使用单独的css文件在html页面中 <style link=''>的方式进行导入样式

插件:mini-css-extract-plugin

npm i mini-css-extract-plugin -D

使用 mini-css-extract-plugin里的loader 替换掉原有的 style-loader

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

//省略

module:{
    rules:[
    {
      test: /\.css$/,
      use: [MiniCssExtractPlugin.loader, "css-loader"],
    }
    ]
},

//省略

  plugins: [

    // 提取css成单独文件
    new MiniCssExtractPlugin({
      // 定义输出文件名和目录
      filename: "static/css/main.css",
    }),
  ],

这样打包好,就会在html单独导入了。

解决兼容性问题

npm i postcss-loader postcss postcss-preset-env -D

在所有 css-loader之前配置post-loader。 

module:{
    rules:[
        {
        // 用来匹配 .css 结尾的文件
        test: /\.css$/,
        // use 数组里面 Loader 执行顺序是从右到左
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
          {
            loader: "postcss-loader",
            options: {
              postcssOptions: {
                plugins: [
                  "postcss-preset-env", // 能解决大多数样式兼容性问题
                ],
              },
            },
          },
        ],
      },
      {
        test: /\.less$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
          {
            loader: "postcss-loader",
            options: {
              postcssOptions: {
                plugins: [
                  "postcss-preset-env", // 能解决大多数样式兼容性问题
                ],
              },
            },
          },
          "less-loader",
        ],
      },
    ]
}

 设置兼容性处理程度

在 package.json 文件中添加 browserslist

//小于ie8的浏览器不处理
"browserslist": ["ie >= 8"]
//兼容市面上最近2个版本的浏览器,全球超过1%人使用的浏览器,正在维护中的
"browserslist": ["last 2 version", "> 1%", "not dead"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值