本文摘要:主要通过实操讲解运用Webpack 5 CSS常用配置的方法步骤

前文已谈到可以通过配置 css-loaderstyle-loader,使 webpack5 具有处理 CSS 资源的能力。css-loader 首先会分析出各个 CSS文件之间的关系,把各个CSS文件合并为一大段 CSS,然后将 CSS 文件编译为 CommonJS 模块,并把该模块引入到 JS 中。紧接着 style-loader 会从 JS 中提取出刚才引入的编译后的 CSS,在页面的 header 中创建 style 标签,并插入该css。

1 提取 CSS 文件

上述配置打包后的资源,在浏览器中运行时,首先会加载 JS 文件,之后才会创建 style 标签来插入样式,很多情况下会出现闪屏现场,导致用户体验不好。这时候可通过配置 mini-css-extract-plugin 插件来提升用户体验,该插件可以提取出独立的 CSS 文件,通过 link 标签加载样式。

插件官网:https://webpack.js.org/plugins/mini-css-extract-plugin/

1.1 安装依赖

安装 mini-css-extract-plugin 为开发依赖:

yarn add mini-css-extract-plugin -D

1.2 修改 webpack 配置

修改 webpack.config.js 文件:

1)引入插件:

const MiniCssExtractPlugin = require('mini-css-extract-plugin')

2)修改 loader 配置:将 module.rules 中所有 style-loader 替换为该插件提供的loader:MiniCssExtractPlugin.loader,如:

//...
module: {
rules: [
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader'
]
},
{
test: /\.s[ca]ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader',
]
},
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'less-loader',
]
},
{
test: /\.styl$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'stylus-loader'
]
},
//...
]
},
//...

3)添加插件配置:在 plugins 中添加该插件

  plugins: [
// ...
new MiniCssExtractPlugin({
filename: 'css/index.css'
})
],

1.3 测试运行

执行 yarn build 打包,打包成功后:

1)查看输出目录 dist,该目录中新增了 css/index.css

2)在浏览器中运行 dist/index.html,在 Elements中可看到 link 标签引入 css/index.css 文件:

2 CSS 兼容性处理

由于浏览器碎片化严重,需要进行 CSS 兼容性的处理。如果手动编写各种兼容样式,工作量较大,可使用 postcss-loader 来实现 CSS 的兼容性。官网:https://webpack.js.org/loaders/postcss-loader/#autoprefixer

2.1 安装依赖

postcss-loader 依赖于 postcss。post-css 有大量的配置,我们可以使用它的预设 postcss-preset-env,该预设包括了 autoprefixer等。

yarn add postcss-loader postcss postcss-preset-env -D

2.2 修改 webpack 配置

1)在 webpack.config.js 中定义通用的 postcss-loader 配置:

const commonPostcssLoader = {
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [
'postcss-preset-env'
]
}
}
}

2)在每个css相关的loader配置中添加上面定义的loader。注意,上面定义的 commonPostcssLoader 需要在 css-loader 之前执行,在 css 预处理器的loader(sass-loader / less-loader / stylus-loader)之后执行:

  rules: [
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
commonPostcssLoader
]
},
{
test: /\.s[ca]ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
commonPostcssLoader,
'sass-loader',
]
},
{
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
commonPostcssLoader,
'less-loader',
]
},
{
test: /\.styl$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
commonPostcssLoader,
'stylus-loader'
]
},
// ...
]

2.3 添加 .browserslistrc 文件

在项目根目录下创建 .browserslistrc 文件,该文件告诉 postcss-loader 需要支持的浏览器。可以在控制台中执行命令 npx browserslist 查看浏览器版本:

在实践中,.browserslistrc 我通常写如下内容:

> 1%
last 10 version
not dead

上述配置表示:占有率大于1%、并且最新的10个版本、并且存在的浏览器。

为了测试 CSS 兼容性,此处暂时将该文件内容修改为占有率大于0.001:

> 0.001%

2.4 测试运行

1)在 src/style/css/css-demo.css 文件中添加一个需要兼容性处理的 css 代码:

h1 {
border-radius: 10px;
}

2)执行打包命令 yarn build (对应为 webpack 命令)

3)打包成功,查看生成的 dist/css/index.css 文件,可发现做了兼容性处理:

3 CSS 压缩处理

上面打包后提取出来的 index.css 并没有进行压缩,通常在生产环境尽量要压缩文件。webpack 提供了插件 css-minimizer-webpack-plugin 压缩 CSS 文件。

官网:https://webpack.js.org/plugins/css-minimizer-webpack-plugin

3.1 安装依赖

yarn add css-minimizer-webpack-plugin -D

3.2 修改 webpack 配置

1)引入插件

const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')

2)在 plugins 中添加插件

  plugins: [
// ....
new CssMinimizerWebpackPlugin()
],

3.3 测试运行

执行打包命令 yarn build,查看打包生成的 dist/css/index.css 文件,可看到该文件已经被压缩。

今日优雅哥(youyacoder)学习结束,期待关注留言分享~~

在Webpack 5 中如何进行 CSS 常用配置?的更多相关文章

  1. CentOS7中防火墙的一些常用配置

    # 启动 systemctl start firewalld # 查看状态 systemctl status firewalld # 停止关闭 systemctl disable firewalld ...

  2. Webpack 2 视频教程 011 - Webpack2 中加载 CSS 的相关配置与实战

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  3. webpack中加载CSS

    webpack强大之处在于可以将CSS当做一个资源模块进行管理和加载 基本使用: 安装webpack的加载插件style-loader和css-loader: npm install style-lo ...

  4. webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

    资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...

  5. webpack项目在开发环境中使用静态css文件

    webpack项目在开发环境中使用静态css文件 在webpack项目(本人使用的 vue-cli-webpack )中,需要引入 css 或 scss等样式文件时,本人目前知道的,通常有以下几种方法 ...

  6. webpack常用配置总结

    1. webpack简介 webpack 是一个模块打包工具.它使得模块相互依赖并且可构建等价于这些模块的静态资源.相比于已经存在的模块打包器(module bundler),webpack的开发动机 ...

  7. webpack 学习4 使用loader 以及常用的一些loader

    webpack本身只支持处理JavaScript,其他的文件,如css img less是不识别的,所以才会有loader这个东西,它就是可以使webpack能够处理其他非js文件的拓展程序 首先我们 ...

  8. vue第二单元(webpack的配置-学习webpack的常用配置)

    第二单元(webpack的配置-学习webpack的常用配置) #课程目标 掌握webpack的常用配置 掌握如何根据实际的需求修改webpack的对应配置 了解webpack-dev-server的 ...

  9. CSS常用样式及示例

    CSS常用样式及示例 一.简介      层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集) ...

随机推荐

  1. Android 12(S) 图像显示系统 - SurfaceFlinger GPU合成/CLIENT合成方式 - 随笔1

    必读: Android 12(S) 图像显示系统 - 开篇 一.前言 SurfaceFlinger中的图层选择GPU合成(CLIENT合成方式)时,会把待合成的图层Layers通过renderengi ...

  2. DOM操作标签,事件绑定,jQuery框架

    DOM操作标签 ''' 在起变量名的时候 如果该变量指向的是一个标签 那么建议使用 xxxEle eg:aEle\pEle\divEle\spanEle ''' 基本使用 动态创建一个标签 var 变 ...

  3. .Net 6 WebApi 项目部署到 Linux 系统上的 Docker 容器

    1.创建一个基础的WebApi项目 注意:因为发布时候,Dockerfile文件必须和解决方案.cspro文件放在同级,所以建议勾上这个,当时遇到这个问题,导致打包镜像时找不到.cspro文件,搞了好 ...

  4. 李阳:京东零售OLAP平台建设和场景实践

    导读: 今天和大家分享京东零售OLAP平台的建设和场景的实践,主要包括四大部分: 管控面建设 优化技巧 典型业务 大促备战 -- 01 管控面建设 1. 管控面介绍 管控面可以提供高可靠高效可持续运维 ...

  5. [漏洞复现] [Vulhub靶机] Tomcat7+ 弱口令 && 后台getshell漏洞

    免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 0x00 背景知识 war文件 0x01 漏洞介绍 影响范围:Tomcat 8.0版本 漏洞类型:弱口令 漏洞成因:在tomc ...

  6. python之三元表达式与生成式与匿名与内置函数(部分)

    目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...

  7. v87.01 鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main () | 百篇博客分析 OpenHarmony 源码

    本篇关键词:内核重定位.MMU.SVC栈.热启动.内核映射表 内核汇编相关篇为: v74.01 鸿蒙内核源码分析(编码方式) | 机器指令是如何编码的 v75.03 鸿蒙内核源码分析(汇编基础) | ...

  8. PostgreSQL Array 数组类型与 FreeSql 打出一套【组合拳】

    前言 PostgreSQL 是世界公认的功能最强大的开源数据库,除了基础数据类型 int4/int8/varchar/numeric/timestamp 等数据类型,还支持 int4[]/int8[] ...

  9. 洛谷 P2629 好消息,坏消息 题解

    暴力算法的时间复杂度是O(n^2),考虑优化: 先导入一种思想--断环为链.说通俗点就是在原数组后面再接上下标为1--(n - 1)的元素: 以样例为例:-3 5 1 2:我们将其断环为链后可以得到这 ...

  10. .NET C#基础(7):接口 - 人如何和猫互动

    0. 文章目的   面向有一定基础的C#初学者,介绍C#中接口的意义.使用以及特点. 1. 阅读基础   了解C#基本语法(如定义一个类.继承一个类)   理解OOP中的基本概念(如继承,多态) 2. ...