【前端】Webpack5中Html和CSS的压缩打包
1.Webpack5简介
1.1.Webpack简介

(1)webpack的发展历程
-
2012.3—webpack(问世)
-
2014.2—webpack1
-
2016.12—webpack2
-
2017.6—webpack3
-
2018.2—webpack4
-
2020.10—webpack5(要求node版本10.13+)
(2)什么是webpack
-
webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具
-
静态模块
- 模块化开发,避免重复代码、 逻辑,提高开发效率
-
打包
- 将各个模块,按照一定的规则组装起来

- 将多个不同类型文件打包
- 编译代码,确保浏览器能解析
- 对代码进行压缩,减少文件体积,提高加载速度
- 对源代码进行格式化校验
- 有热更新功能,提高开发效率
- 不同环境,提供不同的打包策略
1.2.Webpack五个核心配置
(1)入口(entry)
入口起点(entry point) 指示 webpack 应该使用哪个模块,来作为构建其内部依赖图(dependency graph)的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。
默认值是 ./src/index.js,但你可以通过在 webpack configuration中配置 entry 属性,来指定一个(或多个)不同的入口起点。

(2)输出(output)
output 属性告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。主要输出文件的默认值是 ./dist/main.js,其他生成文件默认放置在 ./dist 文件夹中。

(3)加载器(Loader)
webpack 只能理解 JavaScript 和 JSON 文件,这是 webpack 开箱可用的自带能力。loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效 模块,以供应用程序使用,以及被添加到依赖图中。
webpack 的其中一个强大的特性就是能通过 import 导入任何类型的模块(例如 .css 文件),其他打包程序或任务执行器的可能并不支持。我们认为这种语言扩展是很有必要的,因为这可以使开发人员创建出更准确的依赖关系图。
在更高层面,在 webpack 的配置中,loader 有两个属性:
test属性,识别出哪些文件会被转换。use属性,定义出在进行转换时,应该使用哪个 loader。

(4)插件(plugin)
loader 用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量。
想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建一个插件实例。

(5)模式(mode)
通过选择 development, production 或 none 之中的一个,来设置 mode 参数,你可以启用 webpack 内置在相应环境下的优化。其默认值为 production。

1.3.webpack初体验
(1)初始化项目
cnpm init -y
(2)安装webpack
cnpm i webpack webpack-cli -D
(3)创建入口文件

console.log('hello webpack');
(4)打包,指定mode
webpack ./js/index.js -o ./dist --mode=development

2.HTML、CSS资源打包
2.1.理解webpack配置文件
(1)webpack配置文件的作用
-
简化命令行的选项
-
默认配置文件名称为webpack.config.js
-
操作webpack大部分都是在配置webpack.config.js文件
(2)配置详情
- mode(模式)
// 打包模式配置
mode: 'development',
- entry(入口)
// 入口文件配置
entry: './src/index.js',
- output(出口)
const { resolve } = require('path');// 出口文件配置
output: {// 所有输出文件的目标路径,必须是绝对路径path: path.resolve(__dirname, 'dist'),// 出口文件名配置filename: "bundle.js",
},
- module(模块-loader配置)
// 模块配置
module: {rules: [// 配置多个模块规则(配置loader、解析器等选项)],
},
- devServer(用于快速开发应用程序)
// 开发服务器
devServer: {},
- plugin(插件)
// 插件配置
plugins: [],
创建webpack.config.js配置文件
const { resolve } = require("path");module.exports = {// 打包模式配置mode: "development",// 入口文件配置entry: "./js/index.js",// 出口文件配置output: {// 所有输出文件的目标路径,必须是绝对路径path:resolve(__dirname, "dist"),// 出口文件名配置filename: "main.js",},// 模块配置module: {rules: [// 配置多个模块规则(配置loader、解析器等选项)],},// 开发服务器devServer: {},// 插件配置plugins: [],
};
执行命令
npm run build

2.2.自动生成HTML文件和指定模板
自动生成HTML文件(html-webpack-plugin),该插件可以生成一个 HTML 文件,并在HTML中加载所有打包资源,便于服务器访问。
(1)安装
cnpm i html-webpack-plugin -D
(2)在webpack.config.js中引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
(3)webpack.config.js配置plugins
plugins: [new HtmlWebpackPlugin(),
],
执行 npm run build

指定生成HTML模板
(1)新建HTML文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title><%=htmlWebpackPlugin.options.title%></title>
</head>
<body></body>
</html>
注意title这块要用EJS语法,是JS的模板引擎。
(2)配置plugins
plugins: [new HtmlWebpackPlugin({template:'./html/index.html', //指定 html 模板filename:'index.html', //指定 html 名称title:'hello webpack' //指定 html title}),
],
执行 npm run build

2.3.打包多个HTML页面和压缩
(1)打包多个HTML页面
plugins: [new HtmlWebpackPlugin({template:'./html/index.html', filename:'one.html', title:'第一个' }),new HtmlWebpackPlugin({template:'./html/index.html', filename:'two.html', title:'第二个' }),
],

(2)压缩html
plugins: [new HtmlWebpackPlugin({template:'./html/index.html', filename:'index.html', title:'index',minify: {collapseWhitespace: true, // 清除空格换行removeComments: true, // 清除注释}, })],

2.4.CSS文件打包原理
打包css文件需要两个loader:
-
css-loader
- 将css代码转化为js代码,合并到打包后的js文件中。
-
style-loader
- 将包含css内容的js代码,插入到html中style标签中。
(1)安装css-loader和style-loader
cnpm i css-loader style-loader -D
(2)将创建的css文件引入到js文件中
创建css文件
.d1{background-color: cadetblue;
}//html 中 加入一个div元素<div class="d1">我是李祥</div>
import './css/main.css'
console.log('hello webpack');
(3)webpack.config.js配置module
// 模块配置
module: {rules: [// 配置多个模块规则(配置loader、解析器等选项){// 匹配css文件test: /\.css$/i,// 指定加载器,加载顺序是从左到右或者是从下到上use: ['style-loader', 'css-loader'],},],
},

2.5.将CSS代码抽离成单独文件
CSS代码抽离成单独文件的作用:
- 从js文件中抽离出css代码,减少js文件体积
- 当js文件比较庞大时,可以避免阻碍页面的渲染
- 提高渲染速度
将CSS代码抽离成单独文件的插件mini-css-extract-plugin
(1)安装mini-css-extract-plugin
cnpm i mini-css-extract-plugin -D
(2)webpack.config.js引入
const MiniCssExtractPlugin=require('mini-css-extract-plugin')
(3)loader配置(替换style-loader)
use:[MiniCssExtractPlugin.loader,'css-loader']
(4)实例化插件
new MiniCssExtractPlugin({filename:'./css/main.css'
})

2.6.打包CSS预编译语言
(1)安装css预编译语言插件
- less
cnpm install less less-loader -D
- sass
cnpm install node-sass sass-loader -D
- stylus
cnpm install stylus stylus-loader -D
(2)同样js引入less文件,webpack配置文件中配置规则
// 模块配置
module: {rules: [{test: /\.less$/i,use: ['style-loader', 'css-loader', 'less-loader'],},],
},
2.7.CSS样式添加兼容前缀
(1)安装插件
cnpm i postcss-loader autoprefixer -D
(2)配置
-
webpack.config.js
use: [MiniCssExtractPlugin.loader, 'css-loader','postcss-loader' // 处理css兼容 ] -
postcss.config.js
module.exports = {plugins: [require('autoprefixer')], // 添加浏览器前缀 }; -
package.json
"browserslist":["last 2 version", // 兼容浏览器的最近两个版本"> 1%" // 全球占有率超过1%的浏览器 ]
作用:让特殊的css样式兼容各个浏览器
相关文章:
【前端】Webpack5中Html和CSS的压缩打包
1.Webpack5简介 1.1.Webpack简介 (1)webpack的发展历程 2012.3—webpack(问世) 2014.2—webpack1 2016.12—webpack2 2017.6—webpack3 2018.2—webpack4 2020.10—webpack5(要求node版本10.13) &a…...
postman接收后端返回的文件流并自动下载
不要点send,点send and download,postman接受完文件流会弹出文件保存框让你选择保存路径...
谈谈Net-SNMP软件
Net-SNMP是一个开源的SNMP软件套件,它提供了SNMP代理(snmpd)和SNMP工具(如snmpget、snmpwalk等),可以用于监控和管理网络设备。 Net-SNMP最初是从UC Davis的SNMP软件衍生而来,现在已经成为广泛…...
前端对普通数字数组排序示例
1. arr.sort(fn) // 升序排序arr.sort((a, b) > a - b);// 降序排序arr.sort((a, b) > b - a); 2. 冒泡排序 冒泡排序-升序原理: eg: [1, 6, 7, 9, 10, 3, 4, 5, 2] 1) 先遍历第一遍数组, 前一个数字大于后一个数字, 就交换位置, 最后最大值10放在数组的最后, 此时是…...
SQL server中:常见问题汇总(如:修改表时不允许修改表结构、将截断字符串或二进制数据等)
SQL server中:常见问题汇总 1.修改表时提示:不允许修改表结构步骤图例注意 2.将截断字符串或二进制数据。3.在将 varchar 值 null 转换成数据类型 int 时失败。4.插入insert 、更新update、删除drop数据失败,主外键FOREIGN KEY 冲突5.列不允许…...
无线通信中CSI的含义
在无线通信中,CSI代表"Channel State Information",即信道状态信息。CSI是一种关键的信息,用于评估和描述通信信道的特性,以帮助发送器和接收器在通信过程中做出智能的调整和决策。 CSI包括有关通信信道的以下信息&…...
如何一键核实验证身份证的真伪?
据报道,今年10月10日,广东省佛山市朱某因生活琐事与丈夫发生争吵,民警发现她的身份证有问题。 在民警打算进一步了解情况,查看夫妻二人的身份证件时,朱某的身份证引起了民警的注意。这张身份证表面很光滑,…...
冒泡排序:了解原理与实现
目录 原理 实现 性能分析 结论 冒泡排序(Bubble Sort)是一种简单但效率较低的排序算法。它重复地比较相邻的元素并交换位置,直到整个序列有序为止。虽然冒泡排序的时间复杂度较高,但在小规模数据集上仍然具有一定的实际应用价…...
springboot maven项目环境搭建idea
springboot maven项目环境搭建idea 文章目录 springboot maven项目环境搭建idea用到的软件idea下载和安装java下载和安装maven下载和安装安装maven添加JAVA_HOME路径,增加JRE环境修改conf/settings.xml,请参考以下 项目idea配置打开现有项目run或build打…...
vue3检测是手机还是pc端,监测视图窗口变化
1.超小屏幕(手机) 768px以下 2.小屏设备(平板) 768px-992px 3.中等屏幕(旧式电脑) 992px-1200px 4.大屏设备(现代电脑) 1200px以上 <script setup name"welcome"> i…...
B - Magical Subsequence (CCPC2021哈尔滨)
思路: (1)问题:对于已知数组,每组依次选两个,尽量选更多组,选的每组和相等;(假定和为x) (2)于是问题拆分为两步, x是多少x确定时&a…...
Leetcode刷题详解——x的平方根
1. 题目链接:69. x 的平方根 2. 题目描述: 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 **注意:**不允许使用任何内置指数函数和…...
windows安装docker,解决require wsl 2问题
想在windows上安装桌面版docker,上官网下载了安装包,安装完后,启动报错,忘了截图了。 大概意思就是require wsl 2。 于是就是docker FAQ中找相关问题解决方案,点,点,点然后就点到微软了。 ws…...
建立复数类
目录 程序设计 程序分析 系列文章 在课堂示例的基础上,显示复数时如果虚部为0时只显示实部,实部为0时只显示虚部,虚部为负数时以a-bi的形式显示,并为复数类增加减法功能。 程序设计 Work4类: package work;import java.util.Scanner;public class Work4 {private in…...
docker部署prometheus+grafana服务器监控(三) - 配置grafana
查看 prometheus 访问 http://ip:9090/targets,效果如下,上面我们通过 node_exporter 收集的节点状态是 up 状态。 配置 Grafana 访问 http://ip:3000,登录 Grafana,默认的账号密码是 admin:admin,首次登录需要修改…...
面试题:说一下加密后的数据如何进行模糊查询?
文章目录 正文如何对加密后的数据进行模糊查询沙雕做法沙雕一沙雕二 常规做法常规一常规二超神做法 总结 正文 我们知道加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路,希望对大家有所启发。 为了数据安…...
LeetCode75——Day15
文章目录 一、题目二、题解 一、题目 1456. Maximum Number of Vowels in a Substring of Given Length Given a string s and an integer k, return the maximum number of vowel letters in any substring of s with length k. Vowel letters in English are ‘a’, ‘e’…...
Qwt开发环境搭建(保姆级教程)
1.简介 QWT,即Qt Widgets for Technical Applications,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式提供, 输出方式可以是Curves(曲线),Slider…...
【供应链】仓储、物流、车辆管理
...
从另外一个进程中读取数据
从另外一个进程中读取数据,其实就注入线程,寻址,解析内存,处理数据。例如这个就是从另外一个正在运行的进程中,读取数据并保存。实时性还可以。...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...
