webpack5 Css 兼容性处理postcss-loader

news2025/7/18 8:17:38

postcss-loader | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。https://webpack.docschina.org/loaders/postcss-loader/

安装命令

postcss-loader依赖postcss,postcss要做智能预设所以也需要postcss-preset-env所以要三个依赖包

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

webpack.config.js

写的时候要留意放置位置 只有test值为.css的配置项放在css-loader后面其它的css样式配置需要放到 "css-loader",之后与 "xxx-loader",之前

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'style-loader',// MiniCssExtractPlugin.loader, //单独生成css文件
          'css-loader',
          {
            loader: 'postcss-loader',
            options: {
              postcssOptions: {
                plugins: [
                  [
                    'postcss-preset-env', 能解决大多数样式兼容性问题
                    {
                      // 其他选项
                    },
                  ],
                ],
              },
            },
          },
        ],
      },
  {
        test: /\.s[ac]ss$/, //a和c结尾的文件都行(sass|scss)
        use: [
          // 将 JS 字符串生成为 style 节点
          MiniCssExtractPlugin.loader,
          // 将 CSS 转化成 CommonJS 模块
          "css-loader",
          {
            loader: "postcss-loader",
            options: {
              postcssOptions: {
                plugins: [
                  "postcss-preset-env", // 能解决大多数样式兼容性问题
                ],
              },
            },
          },
          // 将 Sass 编译成 CSS
          "sass-loader",
        ],
}
    ],
  },
};

效果发现css3的兼容性并没有改前缀

源代码: 

打包后的代码:

 

 控制兼容性

我们可以在 package.json 文件中添加 browserslist 来控制样式的兼容性做到什么程度。

以下为做到大于IE8的程度

{
  // 其他省略
  "browserslist": ["ie >= 8"]
}

 再次打包查看打包后的结果

 

 或者也可以这样写(取最近两个版本的浏览器兼容不需要用到前缀所以没有前缀)

 "browserslist": [
    "last 2 version", //针对所有浏览器只要最近两个版本
    "> 1%", //覆盖99%的浏览器
    "not dead" //去掉弃用的版本
  ]

针对兼容性多个复用进行整合(MiniCssExtractPlugin 为独立打包css)

webpack5 css 处理(提取 Css 成单独文件)MiniCssExtractPlugin_周家大小姐.的博客-CSDN博客webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。Css 文件目前被打包到 js 文件中,当 js 文件加载时,会创建一个 style 标签来生成样式。style-loader换成MiniCssExtractPlugin.loader。我们应该是单独的 Css 文件,通过 link 标签加载性能才好。https://blog.csdn.net/qq_40190624/article/details/127862255?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127862255%22%2C%22source%22%3A%22qq_40190624%22%7D

// https://webpack.docschina.org/plugins/mini-css-extract-plugin
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

// 获取处理样式的Loaders
const getStyleLoaders = (preProcessor) => {
  return [
    MiniCssExtractPlugin.loader, //单独生成css文件
    "css-loader", //将css资源编译成commonjs的模块到js中
    {
      loader: "postcss-loader",
      options: {
        postcssOptions: {
          plugins: [
            "postcss-preset-env", // 能解决大多数样式兼容性问题
          ],
        },
      },
    },
    preProcessor,
  ].filter(Boolean); //过滤掉preProcessor为undefined值
};

module.exports = {
  // 入口 (相对路径)
  entry: "./src/main.js",
  // 输出
  output: {
    // 文件输出路径
    path: path.resolve(__dirname, "../dist"),
    // 入口文件打包输出文件名
    filename: "static/js/main.js",
    clean: true, //webpack5特性打包前清除上一次打包记录
  },
  // 加载器
  module: {
    rules: [
      // loader的配置
      {
        test: /\.css$/, //只检测.css文件
        use: getStyleLoaders(),
      },
      {
        test: /\.less$/,
        // use与loader的区别,use可以用多个loader;loader只能用一个(loader:'xxxx')
        use: getStyleLoaders("less-loader"),
      },
      {
        test: /\.s[ac]ss$/, //a和c结尾的文件都行(sass|scss)
        use: getStyleLoaders("sass-loader"),
      },
      // https://webpack.docschina.org/guides/asset-modules/#resource-assets
      {
        test: /\.(png|jpe?g|gif|webp|svg)$/, //$匹配结尾,在多行检测中,会匹配一行的结尾
        type: "asset", //转base64
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024, // 小于10kb的图片转为base64,用于减少请求数据,但体积会大一点点
          },
        },
        generator: {
          // 生成输出的图片名字[hash:10]表示只取前10位
          // ext:扩展名
          // query图片参数
          filename: "static/images/[hash:10][ext][query]",
        },
      },
      {
        test: /\.(ttf|woff2?|mp3|mp4|avi)$/, //匹配字体图标库或者视频文件
        type: "asset/resource", //resource对文件原样的输出
        generator: {
          //输出media名称
          filename: "static/media/[hash:10][ext][query]",
        },
      },
      {
        test: /\.js$/,
        exclude: /(node_modules)/, //排除node_modules不做js转换处理
        use: {
          loader: "babel-loader",
          // options: {options配置可以写到babel.config.js文件中好维护
          //   presets: ["@babel/preset-env"],
          // },
        },
      },
    ],
  },
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

震撼来袭,最具中国特色的微服务组件:新一代SpringCloud Alibaba

都说程序员工资高、待遇好, 2022 金九银十到了,你的小目标是 30K、40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升 Java…

【嵌入式 · 机器人】在 Linux 下安装 ROS2(机器人操作系统)

安装要求 安装 ROS2 需要保证 Linux 系统的发行版是 Ubuntu,并且不同版本的 Ubuntu 只能安装对应版本的 ROS2。 系统不是 Ubuntu 怎么办? 系统是 Mac OS 或 Windows:安装一个 Ubuntu 的虚拟机,在虚拟机里安装 ROS2。(…

【深入浅出Spring6】第三期——作用域和工厂模式

一、Bean 的作用域 作用域以下用 scope 代替,在不同的应用情景下可以使用的参数值下是不同的我们以普通 Java 工程为例:可选的参数值有两个 singleton、prototype $ singleton 默认情况下,scope 的属性值就为 singleton,当然我们也可以显式…

一种清洁机器人设计及仿真

目 录 第1章 绪论 1 第2章 清洁机器人路径规划方法的分类及现状 5 2.1 基于事例的学习规划方法 5 2.2 基于环境模型的规划方法 6 2.3 基于行为的结构 7 第3章 清洁机器人的设计任务及方案分析 10 3.1 清洁机器人竞赛介绍 10 3.2 设计任务分解 11 3.3 清洁机器人任务分析及基于行…

Unity和UE4两大游戏引擎,你该如何选择?

目录 游戏引擎 2 ——> 难易区别 编程语言 3 ——> 游戏产品 UE4制作的游戏产品 Unity制作的游戏产品 产品类型 5 ——> 资源商店 6 ——> 人才需求 平均薪资 总结 游戏引擎 Unity和UE4都是游戏引擎,所谓游戏引擎就是集成了复杂功能的游戏…

短视频/直播+教育成为教育新常态

互联网时代,网络视听应用已经成为吸引新网民的主要力量,2020年,在新增的3625万网民中,有23.9%是为了使用网络视听应用而来。网络视听应用中,最受欢迎的当属短视频,已然成为新的国民级应用行业。 如今&…

Excel之数据透视NotePad之列编辑

在日常工作中,经常有数据处理的需求,要统计个数,这里就可以使用到工具的一些功能,如 Excel、Notepad,记录下来,分享功能。 一、Excel 软件 Excel 功能过于强大,下面只是简单分享下日常使用到的…

【附源码】计算机毕业设计JAVA大数据文章发布系统

【附源码】计算机毕业设计JAVA大数据文章发布系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA …

C++ Reference: Standard C++ Library reference: Containers: deque: deque: begin

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/begin/ 公有成员函数 <deque> std::deque::begin C98 iterator begin(); const_iterator begin() const; C11 iterator begin() noexcept; const_iterator begin() const noexcept;返回指向开始…

基于五等均分法和Bob Stone法衡量RFM顾客价值

最近学习了衡量RFM模型的两种顾客价值的方法&#xff0c;即五等均分法和Bob Stone法。仅以此博客记录我的学习过程&#xff0c;后序学习到了其他方法再来补充。关于RFM实战案例可参考我的其他文章大数据分析案例-基于RFM模型对电商客户价值分析 大数据分析案例-用RFM模型对客户…

p53 与铁死亡有关?Nature 解锁新机制

众所周知&#xff0c;p53 是一种肿瘤抑制基因&#xff0c;被广泛称为“基因组的守护者”。自 1979 年被发现至今&#xff0c;p53 基因一直是分子生物学和肿瘤学的研究热门。据 Elie Dolgin 在 Nature 上发表的 “The most popular genes in the human genome” 统计&#xff0c…

wpf Viewport3D 学习

呈现 Viewport3D 元素的 2-D 布局范围内包含的 3-D 内容。就是3D画布&#xff0c; 继承 Object DispatcherObject DependencyObject Visual UIElement FrameworkElement Viewport3D 从FrameworkElement继承&#xff0c;FrameworkElement继承自UIElement&#xff1b; 该 V…

(五)Spring之Bean的作用域

文章目录环境单例的&#xff08;singleton&#xff09;多例的&#xff08;prototype&#xff09;其它scope自定义scope上一篇&#xff1a;&#xff08;四&#xff09;Spring对IoC的实现 环境 spring6里程碑版本的仓库 依赖&#xff1a;spring context依赖、junit依赖、log4j2…

【单片机基础】单片机中断和定时

中断什么是中断&#xff1f;中断IE寄存器中断查询次序例程定时器/计数器实现定时的方法&#xff1f;定时计数的概念什么是单片机定时器/计数器&#xff1f;定时器/计数器内部结构定时器的相关寄存器51单片机定时器初值计算方法详解例程中断 什么是中断&#xff1f; 中断是为使…

VINS学习(二)IMU预积分原理与实现

VINS学习&#xff08;二&#xff09;IMU预积分原理与实现一、连续时间下的IMU积分二、连续时间下的IMU预积分三、离散时间下的IMU预积分1. 欧拉法2. 中值法四、连续时间下的IMU状态误差传递五、离散时间下的IMU状态误差传递六、预积分量关于零偏的雅克比七、VINS代码实践1.预积…

【文末福利】半导体封装率先国产化,400+封装厂商最新名单汇总

根据我国国民经济“九五”计划至“十四五”规划&#xff0c;可窥见多方政策都在积极支持我国集成电路的发展&#xff0c;近几年更是强调突破集成电路关键技术&#xff0c;集中力量发展集成电路。其中封测技术作为集成电路制造的后道工艺&#xff0c;在整个集成电路产业链中扮演…

熬夜整理的vue面试题

Vue-router 路由模式有几种 vue-router 有 3 种路由模式&#xff1a;hash、history、abstract&#xff0c;对应的源码如下所示 switch (mode) {case history:this.history new HTML5History(this, options.base)breakcase hash:this.history new HashHistory(this, options…

网络安全设备之防火墙技术详解

一、防火墙概述 1、网络防火墙简介 无论是大中型企业网络,还是小型家庭办公网络,对网络安全方面的要求一直保持上升趋势。微软公司的官方网站尚且难逃黑客的魔爪,普通的中小网络更是难以抵抗了。解决网络安全问题最常用的防护手段就是安装网络防火墙,对于大中型规模的企业…

css实现流星划过动画

背景 &#x1f44f;渐变伪元素实现流星&#xff0c;translateY实现划过动画&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现原理 translateY()&#xff1a; translateY() 在页面垂直移动元素。 translateY(ty) 对应 …

上海亚商投顾:沪指重返3100点

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪三大指数今日低开高走&#xff0c;沪指重返3100点上方&#xff0c;深成指、创业板指午后均涨超2%。半导体板块掀涨停…