六十天前端强化训练之第三十一天之Webpack 基础配置 大师级讲解(接下来几天给大家讲讲工具链与工程化)

=====欢迎来到编程星辰海的博客讲解======

看完可以给一个免费的三连吗,谢谢大佬!

目录

一、Webpack 核心概念解析

二、实战:多资源打包配置(含完整代码)

三、配置深度解析(重点部分说明)

四、效果演示说明

五、核心学习要点

六、扩展学习图谱

七、常见问题锦囊


一、Webpack 核心概念解析
  1. 本质认知
    Webpack 是模块化思维的工程化解决方案,通过依赖图谱分析将各类资源转换为标准化模块,是现代前端工程化的心脏。

  2. 四大核心支柱

  • Entry(入口):依赖关系的起点文件
  • Output(输出):打包产物的存放规则
  • Loader(加载器):非JS资源的编译器
  • Plugins(插件):打包周期的事件监听器
  1. 工作流深度解析
    从入口文件开始建立依赖图谱 → AST语法分析 → loader转换 → chunk代码分割 → 优化处理 → 输出打包文件

二、实战:多资源打包配置(含完整代码)

(详细注释版配置示例)

JAVASCRIPT

// webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');module.exports = {// 环境模式(development/production)mode: 'development', // 入口配置(支持多入口)entry: {main: './src/index.js',vendor: ['react', 'react-dom'] // 第三方库分离},// 输出配置output: {filename: '[name].[contenthash:8].bundle.js',path: path.resolve(__dirname, 'dist'),clean: true, // 自动清理旧文件assetModuleFilename: 'assets/[hash][ext][query]' // 静态资源路径规则},// 模块处理规则module: {rules: [// JS处理(包含ES6+转换){test: /\.jsx?$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env', '@babel/preset-react']}}},// CSS处理(含模块化方案){test: /\.(css|less)$/,use: [MiniCssExtractPlugin.loader,  // 提取CSS文件{loader: 'css-loader',options: {modules: { // CSS模块化localIdentName: '[name]__[local]--[hash:base64:5]'}}},'postcss-loader', // 自动添加前缀'less-loader'     // LESS编译]},// 图片资源处理{test: /\.(png|jpe?g|gif|webp)$/,type: 'asset/resource',generator: {filename: 'images/[hash][ext]' // 自定义输出路径}},// 字体文件处理{test: /\.(woff2?|eot|ttf|otf)$/,type: 'asset/resource',generator: {filename: 'fonts/[hash][ext]'}},// CSV/TSV文件处理{test: /\.(csv|tsv)$/,use: ['csv-loader']}]},// 插件系统plugins: [// HTML模板插件new HtmlWebpackPlugin({template: './public/index.html',favicon: './public/favicon.ico'}),// CSS提取插件new MiniCssExtractPlugin({filename: 'css/[name].[contenthash:8].css'})],// 开发服务器配置devServer: {static: {directory: path.join(__dirname, 'public'),},compress: true,port: 9000,hot: true,open: true},// 优化策略optimization: {splitChunks: {chunks: 'all', // 代码分割策略cacheGroups: {vendor: {test: /[\\/]node_modules[\\/]/,name: 'vendors',chunks: 'all'}}}}
};


三、配置深度解析(重点部分说明)
  1. 资源模块类型

    • asset/resource:复制文件到输出目录
    • asset/inline:生成DataURL
    • asset/source:导出文件内容
    • asset:自动选择模式(默认8kb临界值)
  2. CSS模块化方案
    通过css-loadermodules配置实现作用域隔离:

CSS

/* Button.module.css */
.primary {background: #1890ff;
}/* 编译后生成唯一类名:Button_primary--ax7s9 */

  • 缓存策略设计
  • [contenthash]:根据文件内容生成哈希值
  • 第三方库分离:通过splitChunks单独打包

四、效果演示说明
  • 目录结构示例

TEXT

dist/
├─ css/
│  └─ main.3d7f2a.css
├─ js/
│  ├─ main.b8d3e1.js
│  └─ vendors.9a2c7f.js
├─ images/
│  └─ 8sdf3a.jpg
├─ fonts/
│  └─ e9k2m3.woff2
└─ index.html

  • 浏览器加载效果

  • 正确加载样式化组件
  • 图片/字体资源正确显示
  • 模块化的CSS作用域隔离
  • 第三方库单独加载

五、核心学习要点
  • 配置哲学
  • 每个loader只做单一功能
  • 执行顺序:从后往前(重要!)
  • 插件通过生命周期hook实现功能
  • 优化准则
  • 生产环境启用TerserPlugin压缩
  • 使用cache-loader加速构建
  • 合理设置exclude/include范围
  • 调试技巧
  • webpack --stats detailed 查看构建详情
  • source-map配置源码映射
  • 使用webpack-bundle-analyzer分析体积

六、扩展学习图谱
  • 官方文档
  • Webpack概念图解
  • Loader开发指南
  • 插件架构解析
  • 进阶阅读
  • 《Webpack性能优化十八式》(知乎专栏)
  • 《深入理解Webpack运行时机制》(掘金小册)
  • 《Webpack Tree Shaking深度解析》(前端之巅)
  • 生态工具
  • webpack-dev-middleware:自定义开发服务器
  • speed-measure-webpack-plugin:构建速度分析
  • thread-loader:多进程编译

七、常见问题锦囊

Q1: 如何处理SASS/SCSS文件?
A: 添加sass-loader并注意loader顺序:

JAVASCRIPT

{test: /\.s[ac]ss$/,use: ['style-loader', 'css-loader', 'sass-loader']
}

Q2: 如何兼容老旧浏览器?
A: 通过.browserslistrc文件配置:

TEXT

# 浏览器兼容要求
last 2 versions
> 1%
not dead

Q3: 如何优化构建速度?
A: 多维度策略:

  1. 缩小文件搜索范围
  2. 使用cache-loader缓存
  3. 开启多线程构建
  4. 合理配置externals

通过理论+实践+优化的三维视角,构建了完整的Webpack知识体系,建议结合官方文档进行实践验证,逐步掌握现代前端工程化的核心要义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41495.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。 在现代云计算及微服务架构的发展中,Docker与Kubernetes(K8s)作为两大核心技术,被广泛…

nebula graph传统使用Docker进行项目发版

nebula graph传统使用Docker进行项目发版 1. nebula graph服务2. 搭建ES集群3. 注意事项3.1 图数据库的启动顺序3.2 模糊查询失效 1. nebula graph服务 1.在测试服务器中执行如下命令 docker commit 85b6e2b8xxx xxx_nebula_es:1.0.0.2执行docker images之后能看到新的镜像 x…

0322-数据库与前后端的连接、数据库表的增删改查

前端 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> <script srcjs/jquery-3.7.1.min.js></script> <script> //jquaryajax发起请求 //传参形式不同 post用data{}…

matlab打开两个工程

1、问题描述 写代码时&#xff0c;需要实时参考别人的代码&#xff0c;需要同时打开2个模型&#xff0c;当模型在同一个工程内时&#xff0c;这是可以直接打开的&#xff0c;如图所示 2、解决方案 再打开一个MATLAB主窗口 这个时候就可以同时打开多个模型了 3、正确的打开方…

深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…

SQL中体会多对多

我们可以根据学生与课程多对多关系的数据库模型&#xff0c;给出实际的表数据以及对应的查询结果示例&#xff0c;会用到JOINLEFT JOIN两种连接 1. 学生表&#xff08;students&#xff09; student_idstudent_name1张三2李四3王五 2. 课程表&#xff08;courses&#xff09…

【android】补充

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…

uv:Rust 驱动的 Python 包管理新时代

在 Python 包管理工具层出不穷的今天&#xff0c;pip、pip-tools、poetry、conda 等各有千秋。而今天要介绍的 uv&#xff0c;则是一款由 Astral 团队推出、采用 Rust 编写的全新工具&#xff0c;目标直指成为 “Python 的 Cargo”。它不仅在性能上表现优异&#xff0c;而且在功…

package.json版本前缀

前言 执行 npm i 下载依赖后&#xff0c;element-plus出现bug&#xff08;单页面多个date-picker同时开启&#xff09;&#xff0c;这是 v2.9.0 的问题&#xff0c;但是项目 package.json 中版本如下&#xff1a; "element-plus": "^2.7.6",乍一看并不是…

CSS+JS 堆叠图片动态交互切换

结合DeepSeek提供的代码&#xff0c;终于实现了堆叠两张图片动态循环切换&#xff0c;以下是代码&#xff1a; 通过绝对定位放了两张图片 <div class"col-lg-5" style"z-index: 40; position: relative;"><img src"images/banner_1.png&quo…

SpringCould微服务架构之Docker(2)

Docker和虚拟机的差别&#xff1a; 虚拟机是在操作系统中模拟硬件设备&#xff0c;然后运行另外一个操作系统。

好用的Markdown阅读编辑器Typora破解记录

Typora破解 一、下载Typora二、安装Typora三、破解Typora &#x1f600; 记录一下Typora破解记录&#xff0c;怕不常用忘记咯&#xff0c;感觉自己现在的脑子就像我的肠子一样&#xff0c;刚装进去就么得了。。。&#x1f614; Typroa算是用起来很舒服的Markdown阅读器了吧&am…

UI前端与数字孪生:打造智慧城市的双引擎

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 随着信息技术的飞速发展&#xff0c;智慧城市的概念逐渐从理论走向实践。智慧城市旨在通过运用物联网…

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…

k8s高可用集群安装

一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …

node.js笔记

1. Node.js基本概念 1.1 什么是Node.js Node.js是一个开源、跨平台的JavaScript运行环境&#xff0c;广泛应用于各类项目。它基于Google Chrome的V8 JavaScript引擎&#xff0c;性能卓越。 Node.js在单个进程中运行&#xff0c;利用异步I/O操作避免阻塞&#xff0c;能高效处…

关于在vscode中的Linux 0.11 应用程序项目的生成和运行

首先我们需要需要查看镜像文件 查看软盘镜像文件 floppyb.img 中的内容 在 VSCode 的“Terminal”菜单中选择“Run Build Task...”&#xff0c;会在 VSCode 的顶部中间位置弹出一个 可以执行的 Task 列表&#xff0c;选择其中的“打开 floppyb.img”后会使用 Floppy Editor …

【JavaScript 简明入门教程】为了Screeps服务的纯JS入门教程

0 前言 0-1 Screeps: World 众所不周知&#xff0c;​Screeps: World是一款面向编程爱好者的开源大型多人在线即时战略&#xff08;MMORTS&#xff09;沙盒游戏&#xff0c;其核心机制是通过编写JavaScript代码来控制游戏中的单位&#xff08;称为“Creep”&#xff09;&#…

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势&#xff0c;其引发的社会影响日益显著。尽管已有多种防御技术被提出&#xff0c;基于深度学习&…