Webpack入门,样式预处理

样式预处理指的是开发者在开发过程中经常会使用一些样式预编译语言,如SCSS、Less等,在项目打包过程中再将这些预编译语言转换成CSS。借助这些语言强大和便捷的特性,可以降低项目的开发和维护成本。

Sass与SCSS

Sass本身是对CSS的语法增强,它有两种语法,现在使用更多的是SCSS(对CSS 3的扩充版本)。

sass-loader就是将SCSS语法编译为CSS,因此在使用时通常还要搭配css-loader和style-loader。loader本身只是编译核心库与Webpack的连接器,因此在项目工程中除了sass-loader以外还要安装sass,sass是真正用来编译scss的,而sass-loader只是起到粘合的作用。

安装命令如下:

npm install sass-loader sass -D

接着在Webpack配置中添加处理SCSS文件规则。

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.scss$/,
      use: ['style-loader','css-loader','sass-loader']
    }]
  }
}

之后就可以在项目工程中新建scss文件,使用scss语法了。

温馨提示

如果想在浏览器的调试工具里查看源码,需要分别为sass-loader和css-loader单独添加source-map的配置项。

Less同样是对CSS的一种扩展。与SCSS类似,它也需要安装loader和其本身的编译模块。安装命令如下:

npm install less-loader less -D

Less在配置上也与SCSS十分类似。

// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.less$/,
      use: ['style-loader','css-loader','less-loader'],
    }]
  }
}

PostCSS

严格来说,PostCSS并不能算是一个CSS的与编译器,它只是一个编译插件的容器。它的工作模式是接收样式源代码并交由编译插件处理,最后输出CSS文件。开发者可以自己指定使用哪些插件来实现特定的功能。

使用post-loader可以轻松地将PostCSS与Webpack连接起来。安装命令如下:

npm install post-loader postcss -D
// webpack.config.js
module.exports = {
  ...
  module: {
    rules: [{
      test: /\.css$/,
      use: ['style-loader','css-loader','postcss-loader'],
    }]
  }
}

温馨提示

postcss-loader可以与css-loader结合使用,也可以单独使用,也就是说不配置css-loader也可以达到相同的效果。唯一不同的是,单独使用postcss-loader时不建议使用CSS中的@import语句,否则会产生冗余的代码,因此官方推荐将postcss-loader放在css-loader之后使用。

除此之外,PostCSS要求必须有一个单独的配置文件,因此需要在项目的根目录下创建一个postcss.config.js文件。

PostCSS一个最广泛的应用场景就是与Autoprefixer结合,为CSS自动添加厂商前缀。Autoprefixer是一个样式工具,可以根据caniuse.con上的数据,自动决定是否要为某一特性添加厂商前缀,并且可以由开发者为其指定支持浏览器的范围。

安装命令如下:

npm install autoprefixer -D

在postcss.config.js中添加autoprefixer。

// postcss.config.js
module.exports = {
  plugin: [
    autoprefixer({
      grid: true,
      browsers: [
        '>1%',
        'last 3 versions',
        'android 4.2',
        'ie 8'
      ]
    })
  ]
}

开发者可以在autoprefixer中添加需要支持的特性(如grid)以及兼容哪些浏览器。配置好之后,开发者就可以使用一些较新的CSS特性。

.container {
  display: grid;
}

// 由于在上面的配置中指定了grid:true,也就是为grid特性添加IE前缀,经过编译后则会成为

.container {
  display: -ms-grid;
  display: grid;
}

stylelint

stylelint是一个CSS的质量检测工具,就像eslint一样,开发者可以为其添加各种规则,来统一项目的代码风格,确保代码质量。

安装命令如下:

npm install stylelint -D

在postcss.config.js中添加相应配置。

// postcss.config.js
const stylelint = require("stylelint");
module.exports = {
  plugin: [
    stylelint({
      config: {
        rules: {
          'declaration-no-important': true,
        }
      }
    })
  ]
}

上面的配置添加了declaration-no-important这样一条规则,即当代码中出现“!important”时就会给出警告。

CSSNext

PostCSS可以与CSSNext结合使用,让开发者在应用中使用最新的CSS语法特性。

安装命令如下:

npm install postcss-cssnext -D

在postcss.config.js中添加相应配置。

// postcss.config.js
const postcssCssnext = require('postcss-cssnext');
module.exports = {
  plugins: [
    postcssCssnext({
      browsers:[
       '>1%',
       'last 2 versions',
      ]
    })
  ]
}

制定好需要支持的浏览器之后,开发者就可以顺畅地使用CSSNext的特性了。PostCSS会帮助开发者把CSSNext的语法翻译为浏览器能接收的属性和形式。

:root {
  --highlightColor: hwb(190,35%,20%);
}
body {
  color: var(--highlightColor);
}

// 打包后的结果

body{
  color: rgb(89,185,204);
}

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/webpack-style-preprocessing.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2022年11月24日
下一篇 2022年11月28日

相关推荐

  • JavaScript 的 this 原理

    有时候会使用一种东西,并不代表你了解它。就像你会写JavaScript代码,能看懂JavaScript代码,但不代表你懂它。 学懂 JavaScript 语言,一个标志就是理解下面…

    2019年8月1日
    1.9K
  • JAVA基础知识整理

    终于下定决心2020年转JAVA开发,自学之路坎坷曲折。俗话说的话,好记性不如烂笔头。如果有小伙伴们也像我一样在JAVA自学之路上徘徊,那就关注一下我的博客网站。我会不定期更新一下…

    2020年1月11日
    1.9K
  • Java自学之String类

    在实际项目开发中,String是一个必须使用的程序类,可以说是项目的核心组成类。在Java程序里所有的字符串都要求使用【’‘】进行定义,同时也可以利用【+】实现字符串的连接处理。 …

    2020年11月30日
    1.6K
  • JavaScript中call、apply及bind的深度解析

    函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础…

    2019年8月5日
    1.8K
  • 曾被问及的一些关于VUE的面试题

    由于没有系统的专研过VUE,关于VUE的一些理论知识点,没有去挖心思记忆及理解,只是在实际工作中知道怎么去使用。所以曾在面试的过程中被人嫌弃过,这一直是小编的痛点,/(ㄒoㄒ)/~…

    2022年4月2日
    968
  • 如何搭建MyBatis开发环境

    进入一段时间的学习及温习,已经可以说是初步掌握了Javaweb入门开发,由于我的中心思想是抛弃JSP,做纯粹的前后端分离项目,所以接下来计划学习持久层开发,现在主流的持久层开发工具…

    2022年4月6日
    921
  • 函数防抖与函数节流

    函数防抖 定义 触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;更直白一点就是:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,…

    2020年7月17日
    1.6K
  • flex布局详解

    往往在移动端开发过程中,弹性布局是非常实用的一种手段。往往你并不需要去反复的使用媒体查询的。整整的响应式布局是使界面能够自动的根据屏幕进行变化,做到完美的弹性布局,在必要的时候,去…

    2018年9月10日
    2.4K
  • Angular 4.x ngModel 双向绑定原理揭秘

    一直以来都没有去深入探究Angular,只是熟练运用。真要被问起来,很多关于angular的理论知识都回答不上来。感觉上学背书的能力已经丧失的差不多了。只能以这样的方式搜集整理出来。

    2019年7月2日
    2.1K
  • MyBatis配置之properties属性详解

    之前写了一篇《如何搭建MyBatis开发环境》,通过一个简单的实例讲解了关于搭建MyBatis的开发环境,这篇将详细讲解MyBatis的配置。 MyBatis配置文件的层次结构 这…

    2022年4月18日
    935