Webpack干货系列 | 怎么运用 Webpack 5 处理css/scss/sass、less、stylus样式资源
程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构。分享vue、Java等前后端技术和架构。
本文摘要:主要讲解webpack 5 如何高效处理CSS 资源、scss/sass 资源、less 资源、 stylus 资源这里是引用
在前端开发中,样式是必不可少的一部分。编写样式最早是使用最原始的 css,随着前端工程化的发展,逐渐出现了很多 css 预处理器,如 scss/sacc、less、stylus 等。通过这些 css 预处理器,是通过对应的语言为 css 添加编程特性,帮助我们编写与时俱进、可维护性较高的样式代码。
Webpack 本身并不能识别各种样式资源(css、less、scss等),需要通过多种 loader(加载器)来帮助 Webpack 处理样式资源。
1 处理 CSS 资源
1.1 编写css代码
继续前一节的工程,在 src 目录下创建目录 style/css/,并在css目录下创建文件 css-demo.css:
.demo-css {
width: 300px;
height: 80px;
background: red;
}
在 template/index.html 中标签后面添加一个 div 标签,class 属性为上面定义的样式 demo-css:
<div class="demo-css">css demo</div>
由于之前在 webpack.config.js 指定了了 webpack 打包的入口文件为 src/main.js,如果不在该文件、该文件直接或间接引入的文件中引入css-demo.css 文件,webpack是不知道要打包这个 css 文件的。所以需要在 main.js 中引入该 css 文件:
import './style/css/css-demo.css'
1.2 打包测试
现在执行前一节配置的 build 命令让 webpack 打包:yarn build。
执行后会发现报错:
ERROR in ./src/style/css/css-demo.css 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
从报错信息中可以看出 webpack 默认无法解析 css 文件。这时候就需要使用 loader 扩展 webpack 的处理能力。
1.3 安装依赖
webpack 处理 css 样式资源需要两个loader依赖:css-loader 和 style-loader。
yarn add css-loader style-loader -D
1.4 配置 css 相关 loader
在 webpack.config.js 中配置上面安装的两个 loader,配置后 webpack.config.js 文件如下:
const path = require('path')
module.exports = {
entry: './src/main.js',
output: {
path: path.join(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
},
mode: 'development'
}
module 节点是新增的内容,该节点的rules 属性就是配置loader。rules 为一个数组,数组每个对象配置针对什么类型的文件,使用哪些loader来处理。每个对象属性意思分别如下:
- test:处理什么文件,可以是具体的文件名,也可以是正则表达式。这里配置的
/\.css$/表示以 css 结尾的文件,即所有css文件。 - use:使用哪些loader来处理,多个loader的执行顺序为从下往上(如果写在一行,就是从右到左)。这里配置了
style-loader和css-loader,表示使用这两个loader来处理 css 文件,并且先使用css-loader来处理 css 文件,处理后的结果再使用style-loader来处理。那这两个loader分别是干啥用的呢?
css-loader: 把 css 文件编译为 CommonJS 模块,并将该模块引入到 JS 中。
style-loader:创建 style标签,将 JS 中的 CSS 添加到 HTML中。
TODO 这里添加一张图描述
1.5 打包测试运行
配置好 webpack.config.js 后,便可以运行 build 命令让 webpack 打包了。
yarn build
这时可以看到 webpack 打包成功。
webpack 5.73.0 compiled successfully in 632 ms
在浏览器中运行 template/index.html,可以看到 css-demo.css 中定义的样式已经生效。查看网页元素,可以在head中看到上面定义的样式插入到style标签里面:

2 处理 scss/sass 资源
scss 与 sass 类似,只是在写法上面,sass 不使用花括号和分号。
2.1 编写 scss/sass 代码
在 src/style 目录下创建目录 scss,并在 scss 中分别创建样式文件scss-demo.scss 和 sass-demo.sass。
scss-demo.scss:
.demo-scss {
width: 300px;
height: 80px;
background: blue;
}
Sass-demo.scss:
.demo-sass
width: 300px
height: 80px
background: darkblue
在 template/index.html 中添加测试元素div:
<div class="demo-scss">scss demo</div>
<div class="demo-sass">sass demo</div>
在 src/main.js 中引入上面两个样式文件:
import './style/scss/scss-demo.scss'
import './style/scss/sass-demo.sass'
2.2 安装依赖
处理 scss 文件,需要使用到 sass、sass-loader、css-loader 和 style-loader。sass-loader 用于将 scss/sass 文件编译为 css 文件,编译后的 css 文件依次经过 css-loader 和 style-loader 处理,最后通过style标签插入到HTML中。sass-loader 需要依赖 sass。
由于前面已经安装了 css-loader 和 style-loader,此处再安装 sass 和 sass-loader 即可。
yarn add sass sass-loader -D
2.3 配置 scss/sass 相关loader
上面在rules中配置了针对 css 文件的 loader,现继续在后面配置针对 scss/sass 配置的loader:
module: {
rules: [
...
{
test: /\.s[ca]ss$/,
use: [
'style-loader',
'css-loader',
'sass-loader',
]
}
]
},
TODO 添加一个图
2.4 打包测试运行
先执行 yarn build 打包,打包成功后在浏览器中查看:

3 处理 less 资源
3.1 编写 less 代码
在 src/style 目录下创建目录 less,并在 less 中创建样式文件less-demo.less:
less-demo.scss:
.demo-less {
width: 300px;
height: 80px;
background: green;
}
在 template/index.html 中添加测试元素div:
<div class="demo-less">less demo</div>
在 src/main.js 中引入上面两个样式文件:
import './style/less/less-demo.less'
3.2 安装依赖
处理 less 文件,需要使用到 less-loader、css-loader 和 style-loader。less-loader 用于将 less 文件编译为 css 文件,编译后的 css 文件依次经过 css-loader 和 style-loader 处理,最后通过style标签插入到HTML中。less-loader 依赖于 less。
yarn add less less-loader -D
3.3 配置 less 相关loader
在rules中配置了针对 less 文件的 loader:
module: {
rules: [
...
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
'less-loader',
]
}
]
},
TODO 添加一个图
3.4 打包测试运行
先执行 yarn build 打包,打包成功后在浏览器中查看:

4 处理 stylus 资源
stylus 的语法更加简洁,除了省略花括号和分号,连冒号也省略了。但是要严格注意缩进。
4.1 编写 stylus 代码
在 src/style 目录下创建目录 stylus,并在 stylus 中创建样式文件stylus-demo.styl:
.demo-stylus
width 300px
height 80px
background yellow
在 template/index.html 中添加测试元素div:
<div class="demo-stylus">stylus demo</div>
在 src/main.js 中引入上面两个样式文件:
import './style/stylus/stylus-demo.styl'
4.2 安装依赖
处理 stylus 文件,需要使用到 stylus-loader、css-loader 和 style-loader。stylus-loader 用于将 styl文件编译为 css 文件,编译后的 css 文件依次经过 css-loader 和 style-loader 处理,最后通过style标签插入到HTML中。stylus-loader 依赖于 stylus。
yarn add stylus stylus-loader -D
4.3 配置 stylus 相关loader
在rules中配置了针对 less 文件的 loader:
module: {
rules: [
...
{
test: /\.styl$/,
use: [
'style-loader',
'css-loader',
'stylus-loader'
]
}
]
},
TODO 添加一个图
4.4 打包测试运行
先执行 yarn build 打包,打包成功后在浏览器中查看:

今日优雅哥(youyacoder)学习结束,期待关注留言分享~~
Webpack干货系列 | 怎么运用 Webpack 5 处理css/scss/sass、less、stylus样式资源的更多相关文章
- Webpack干货系列 | 在 Webpack 5 集成 ESLint 的方法
程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解运用Webpack 5 中集成 ESLint 的方 ...
- Webpack干货系列 | Webpack5 怎么处理字体图标、图片资源
程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解在不需要引入额外的loader的条件下运用Webp ...
- [js高手之路]深入浅出webpack教程系列6-插件使用之html-webpack-plugin配置(下)
上文我们对html-webpack-plugin的实例htmlWebpackPlugin进行了遍历分析,讲解了几个常用属性( inject, minify )以及自定义属性的添加,本文,我们继续深入他 ...
- [js高手之路]深入浅出webpack教程系列5-插件使用之html-webpack-plugin配置(中)
上文我们讲到了options的配置和获取数据的方式,本文,我们继续深入options的配置 一.html-webpack-plugin插件中的options除了自己定义了一些基本配置外,我们是可以任意 ...
- [js高手之路]深入浅出webpack教程系列4-插件使用之html-webpack-plugin配置(上)
还记得我们上文中的index.html文件吗? 那里面的script标签还是写死的index.bundle.js文件,那么怎么把他们变成动态的index.html文件,这个动态生成的index.htm ...
- [js高手之路]深入浅出webpack教程系列3-配置文件webpack.config.js详解(下)
本文继续接着上文,继续写下webpack.config.js的其他配置用法. 一.把两个文件打包成一个,entry怎么配置? 在上文中的webpack.dev.config.js中,用数组配置entr ...
- [js高手之路]深入浅出webpack教程系列7-( babel-loader,css-loader,style-loader)的用法
什么是loader呢,官方解释为文件的预处理器,通俗点说webpack在处理静态资源的时候,需要加载各种loader,比如,html文件,要用html-loader, css文件要用css-loade ...
- [js高手之路]深入浅出webpack教程系列9-打包图片(file-loader)用法
我们还是接着上文继续,本文我们要讲的是图片资源的打包,图片在静态排版中,经常出现的两个位置是css通过background引入背景,还有一种就是在html模板文件中用img标签引入的方式,如果要在we ...
- [js高手之路]深入浅出webpack教程系列8-(postcss-loader,autoprefixer,html-loader,less-loader,ejs-loader)用法
我们接着上文,那么在上篇文章的最后,写到了css-loader的用法,如果你用心发现,就能看到我在style.css样式文件中写了一个这样的样式: div { transition: all ease ...
随机推荐
- 解决vue安装less报错Failed to compile with 1 errors的问题
1.创建vue项目后安装less,执行 npm install less less-loader --save-dev 下载版本为:less-loader@6.1.0 , less@3.11.3,重启 ...
- springboot:使用异步注解@Async的前世今生
在前边的文章中,和小伙伴一起认识了异步执行的好处,以及如何进行异步开发,对,就是使用@Async注解,在使用异步注解@Async的过程中也存在一些坑,不过通过正确的打开方式也可以很好的避免,今天想和大 ...
- Kafka核心组件详解
1.概述 对于Kafka的学习,在研究其系统模块时,有些核心组件是指的我们去了解.今天给大家来剖析一下Kafka的一些核心组件,让大家能够更好的理解Kafka的运作流程. 2.内容 Kafka系统设计 ...
- 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩
@ 目录 概述/理解 使用场景 创建vmis 扩缩容 弹性伸缩 方法1 方法2 概述/理解 VirtualMachineInstanceReplicaSet(vmis)确保指定数量的 VirtualM ...
- 分享一款高逼格的Linux磁盘信息查看工具
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 可以使用df命令来显示在Linux.macOS和类Unix系统中挂载的文件系统上有多少可用磁盘 ...
- Mysql数据库基础_复习思维导图
Mysql复习的一个小总结,用xmind写的.(字数没有都不给我发博客) 下面是一些备注 子查询 MySQL子查询称为内部查询,而包含子查询的查询称为外部查询. 子查询可以在使用表达式的任何地方使用, ...
- Spring 源码(11)Spring Bean 的创建过程(2)
Spring Bean 的创建过程介绍了FactoryBean 的创建方式,那么接下来介绍不是FactoryBean的创建方式,在创建过程中,又会分为单例的Bean的创建,原型类型的Bean的创建等. ...
- scrapy架构与目录介绍、scrapy解析数据、配置相关、全站爬取cnblogs数据、存储数据、爬虫中间件、加代理、加header、集成selenium
今日内容概要 scrapy架构和目录介绍 scrapy解析数据 setting中相关配置 全站爬取cnblgos文章 存储数据 爬虫中间件和下载中间件 加代理,加header,集成selenium 内 ...
- os模块,sys模块,json模块,subprocess模块
os模块 一·什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同 的平台进行相应的操作,在python编程时,经常和文件.目录打交道 ...
- 637. Average of Levels in Binary Tree - LeetCode
Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这 ...