【前端工程化】抽离CSS文件,告别style-loader️(8)

devtools/2024/11/20 23:36:46/

在 Webpack 中,默认情况下,CSS 代码会被 css-loader 转换后,交给 style-loader 处理。style-loader 的工作方式是将样式插入到 <style> 标签中,这对于开发模式来说是非常方便的,因为它可以实现热更新。但在生产环境中,我们通常希望将 CSS 代码抽离成单独的文件,以便更好地管理和优化。

为了实现这一目标,我们可以使用 mini-css-extract-plugin。该插件提供了两个主要的功能:

  1. Plugin:负责生成 CSS 文件。
  2. Loader:负责记录要生成的 CSS 文件的内容,同时导出开启 CSS Module 后的样式对象。
cssextractplugin_7">1. 安装 mini-css-extract-plugin

首先,需要安装 mini-css-extract-plugin

npm install -D mini-css-extract-plugin
2. 配置 Webpack

在 Webpack 配置文件中,需要引入 MiniCssExtractPlugin 并进行相应的配置。

const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader,'css-loader?modules' // 开启 CSS Modules]}]},plugins: [new MiniCssExtractPlugin({filename: '[name].[contenthash:5].css' // 配置生成的文件名})]
};
3. 配置生成的文件名

MiniCssExtractPluginfilename 选项用于配置生成的 CSS 文件名。这个选项的工作方式类似于 output.filename,可以根据 chunk 生成的样式文件名进行配置。

例如,配置生成的文件名为 [name].[contenthash:5].css

  • [name]:表示 chunk 的名称。
  • [contenthash:5]:表示根据文件内容生成的哈希值,长度为 5 位。

默认情况下,每个 chunk 对应一个 CSS 文件。如果你希望所有 chunk 的 CSS 代码合并成一个文件,可以使用 [name].css 或者 [contenthash:5].css

4. 示例

假设你有一个简单的项目结构:

project
├── src
│   ├── index.js
│   └── style.css
├── dist
└── webpack.config.js

src/style.css 文件内容如下:

css">body {background-color: #f40;
}

src/index.js 文件内容如下:

import './style.css';document.write('Hello, World!');

webpack.config.js 文件内容如下:

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /\.css$/,use: [MiniCssExtractPlugin.loader,'css-loader?modules' // 开启 CSS Modules]}]},plugins: [new MiniCssExtractPlugin({filename: '[name].[contenthash:5].css'})]
};

运行 Webpack:

npx webpack

编译完成后,dist 目录下会生成 bundle.jsmain.[contenthash:5].css 文件。

5. 总结

通过使用 mini-css-extract-plugin,你可以将 CSS 代码抽离成单独的文件,这有助于更好地管理和优化生产环境中的样式资源。


http://www.ppmy.cn/devtools/135606.html

相关文章

常用Adb 命令

# 连接设备 adb connect 192.168.10.125# 断开连接 adb disconnect 192.168.10.125# 查看已连接的设备 adb devices# 安装webview adb install -r "D:\webview\com.google.android.webview_103.0.5060.129-506012903_minAPI23(arm64-v8a,armeabi-v7a)(nodpi)_apkmirror.co…

css3中的多列布局,用于实现文字像报纸一样的布局

作用&#xff1a;专门用于实现类似于报纸类的布局 常用的属性如下&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

《深入理解 Spring MVC 工作流程》

一、Spring MVC 架构概述 Spring MVC 是一个基于 Java 的轻量级 Web 应用框架&#xff0c;它遵循了经典的 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;将请求、响应和业务逻辑分离&#xff0c;从而构建出灵活可维护的 Web 应用程序。 在 Spring MV…

PyCharm 中的【控制台】和【终端】的区别

pycharm专业版-使用 PyCharm 中的【控制台】和【终端】的区别如下&#xff1a; 1.环境&#xff1a;控制台是 PyCharm 的内部环境&#xff0c; 终端 是操作系统的命令行界面。 2.功能&#xff1a;控制台可以运行 Python 代码&#xff0c;并显示执行结果&#xff1b; 终端可以…

【flutter】flutter2升级到3.

文章目录 背景flutter2-3升级的修改之处界面效果其它 背景 以这个 https://github.com/aa286211636/Flutter_QQ 为例子&#xff0c; 升级下看看 flutter2-3升级的修改之处 flatButton变为TextButton设备屏幕尺寸获取: Screen.width(context)变为MediaQuery.of(context).size…

SpringCloud处理Websocket消息过长自动断开连接

SpringCloud处理Websocket消息过长自动断开连接 问题描述 近期实现了客户端订阅Websocket后&#xff0c;服务端定期向客户端推送相关设备消息的功能&#xff0c;在本地测试没有问题&#xff0c;上线后却发现订阅设备数量超过一定数量后Websocket就会自动断开连接 报错日志 ja…

Python 学习笔记:集合(Set)

一、概述 集合&#xff08;Set&#xff09;是 Python 中的一种内置数据结构&#xff0c;主要用于存储唯一的元素。集合的主要特点包括&#xff1a; 无序性&#xff1a;集合中的元素没有固定的顺序&#xff0c;不能通过索引访问。唯一性&#xff1a;集合中的每个元素都是唯一的…

基于YOLOv8深度学习的智慧农业山羊行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧农业的快速发展&#xff0c;利用先进的技术手段对牲畜的行为进行自动化监测和管理&#xff0c;已经成为现代农业中的重要研究方向之一。在传统的农业管理模式中&#xff0c;牲畜的行为监测通常依赖于人工观测&#xff0c;耗时耗力且难以实现大规模实时监控。然而&#…