码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • webpack5 Css 兼容性处理postcss-loader


    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",之前

    1. module.exports = {
    2. module: {
    3. rules: [
    4. {
    5. test: /\.css$/,
    6. use: [
    7. 'style-loader',// MiniCssExtractPlugin.loader, //单独生成css文件
    8. 'css-loader',
    9. {
    10. loader: 'postcss-loader',
    11. options: {
    12. postcssOptions: {
    13. plugins: [
    14. [
    15. 'postcss-preset-env', 能解决大多数样式兼容性问题
    16. {
    17. // 其他选项
    18. },
    19. ],
    20. ],
    21. },
    22. },
    23. },
    24. ],
    25. },
    26. {
    27. test: /\.s[ac]ss$/, //a和c结尾的文件都行(sass|scss)
    28. use: [
    29. // 将 JS 字符串生成为 style 节点
    30. MiniCssExtractPlugin.loader,
    31. // 将 CSS 转化成 CommonJS 模块
    32. "css-loader",
    33. {
    34. loader: "postcss-loader",
    35. options: {
    36. postcssOptions: {
    37. plugins: [
    38. "postcss-preset-env", // 能解决大多数样式兼容性问题
    39. ],
    40. },
    41. },
    42. },
    43. // 将 Sass 编译成 CSS
    44. "sass-loader",
    45. ],
    46. }
    47. ],
    48. },
    49. };

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

    源代码: 

    打包后的代码:

     

     控制兼容性

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

    以下为做到大于IE8的程度

    1. {
    2. // 其他省略
    3. "browserslist": ["ie >= 8"]
    4. }

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

     

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

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

    针对兼容性多个复用进行整合(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

    1. // https://webpack.docschina.org/plugins/mini-css-extract-plugin
    2. const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    3. // 获取处理样式的Loaders
    4. const getStyleLoaders = (preProcessor) => {
    5. return [
    6. MiniCssExtractPlugin.loader, //单独生成css文件
    7. "css-loader", //将css资源编译成commonjs的模块到js中
    8. {
    9. loader: "postcss-loader",
    10. options: {
    11. postcssOptions: {
    12. plugins: [
    13. "postcss-preset-env", // 能解决大多数样式兼容性问题
    14. ],
    15. },
    16. },
    17. },
    18. preProcessor,
    19. ].filter(Boolean); //过滤掉preProcessor为undefined值
    20. };
    21. module.exports = {
    22. // 入口 (相对路径)
    23. entry: "./src/main.js",
    24. // 输出
    25. output: {
    26. // 文件输出路径
    27. path: path.resolve(__dirname, "../dist"),
    28. // 入口文件打包输出文件名
    29. filename: "static/js/main.js",
    30. clean: true, //webpack5特性打包前清除上一次打包记录
    31. },
    32. // 加载器
    33. module: {
    34. rules: [
    35. // loader的配置
    36. {
    37. test: /\.css$/, //只检测.css文件
    38. use: getStyleLoaders(),
    39. },
    40. {
    41. test: /\.less$/,
    42. // use与loader的区别,use可以用多个loader;loader只能用一个(loader:'xxxx')
    43. use: getStyleLoaders("less-loader"),
    44. },
    45. {
    46. test: /\.s[ac]ss$/, //a和c结尾的文件都行(sass|scss)
    47. use: getStyleLoaders("sass-loader"),
    48. },
    49. // https://webpack.docschina.org/guides/asset-modules/#resource-assets
    50. {
    51. test: /\.(png|jpe?g|gif|webp|svg)$/, //$匹配结尾,在多行检测中,会匹配一行的结尾
    52. type: "asset", //转base64
    53. parser: {
    54. dataUrlCondition: {
    55. maxSize: 10 * 1024, // 小于10kb的图片转为base64,用于减少请求数据,但体积会大一点点
    56. },
    57. },
    58. generator: {
    59. // 生成输出的图片名字[hash:10]表示只取前10位
    60. // ext:扩展名
    61. // query图片参数
    62. filename: "static/images/[hash:10][ext][query]",
    63. },
    64. },
    65. {
    66. test: /\.(ttf|woff2?|mp3|mp4|avi)$/, //匹配字体图标库或者视频文件
    67. type: "asset/resource", //resource对文件原样的输出
    68. generator: {
    69. //输出media名称
    70. filename: "static/media/[hash:10][ext][query]",
    71. },
    72. },
    73. {
    74. test: /\.js$/,
    75. exclude: /(node_modules)/, //排除node_modules不做js转换处理
    76. use: {
    77. loader: "babel-loader",
    78. // options: {options配置可以写到babel.config.js文件中好维护
    79. // presets: ["@babel/preset-env"],
    80. // },
    81. },
    82. },
    83. ],
    84. },
    85. }

  • 相关阅读:
    计算机毕业设计(附源码)python智慧停车系统
    309. 买卖股票的最佳时机含冷冻期
    w字符编码
    【系统性学习】Linux Shell易忘重点整理
    Activiti 工作流引擎 详解
    PID--位置型PID和增量式PID比较
    Java基本数据类型
    轻量自高斯注意力(LSGA)机制
    分享:互信息在对比学习中的应用
    贪心算法
  • 原文地址:https://blog.csdn.net/qq_40190624/article/details/127862866
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号