惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
博客园 - Franky
MyScale Blog
MyScale Blog
L
LangChain Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
量子位
A
About on SuperTechFans
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
V
Visual Studio Blog
Vercel News
Vercel News
B
Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
U
Unit 42

博客园 - JavAndroidJSql

ai编程----Ai codex编程 龙虾---openClaw 配置企业微信 龙虾---openClaw龙虾安装和理解(类似Hermes 编程开源智能体) 前端---自定义hook函数 前端--react使用 Reducer 和 Context 拓展应用和组件 前端----服务端渲染组件SSR 前端---ts语法 前端--uniapp ai---sd 模型头像生成 前端 ----form表单对齐处理 ai------代码辅助ai工具对比 ai ----语音克隆 数字人 项目相关方案 @前端----节流防抖 @面试项目管理----总结整理 js开发过程遇到的基础问题 ai数字人相关研究 前端 -----浏览器等前端运行容器的工作原理 ios ---时间 格式 判断兼容问题 人工智能chatGPT----链接大全 ffmpeg----用法及命令使用总结
@前端--webpack实现原理及核心过程
JavAndroidJSql · 2025-02-19 · via 博客园 - JavAndroidJSql

Webpack 的原理简单总结

1. 核心思想

Webpack 是一个模块打包工具,它将项目中的所有资源(JS、CSS、图片等)视为模块,通过依赖关系构建依赖图,借助Loader转换,借助plug插件进行优化,最终打包成一个或多个静态文件。

2. 核心概念

  1. Entry(入口)

    • 指定打包的起点文件,Webpack 从入口文件开始构建依赖图。

  2. Output(输出)

    • 指定打包后的文件输出位置和文件名。

  3. Loader(加载器)

    • 用于处理非 JS 文件(如 CSS、图片等),将其转换为 Webpack 能理解的模块。

  4. Plugin(插件)

    • 用于扩展功能,例如压缩代码、提取 CSS 等。

  5. Module(模块)

    • 项目中每个文件都是一个模块,Webpack 会解析模块之间的依赖关系。

  6. Chunk(代码块)

    • 打包后的代码块,可以是入口文件、异步加载的模块或通过 SplitChunksPlugin 拆分的代码。

3. 工作流程

  1. 初始化

    • 读取配置文件(webpack.config.js),初始化配置参数。

  2. 构建依赖图

    • 从入口文件开始,递归解析模块的依赖关系,生成依赖图。

  3. 加载和转换模块

    • 使用 Loader 对模块进行转换(如将 ES6 转换为 ES5、将 SCSS 转换为 CSS 等)。

  4. 优化和打包

    • 使用 Plugin 对模块进行优化(如压缩代码、提取公共模块等)。

    • 将模块打包成一个或多个 Chunk。

  5. 输出文件

    • 将打包后的 Chunk 写入到输出目录。

4. 代码示例

const path = require('path');

module.exports = {
  entry: './src/index.js', 

5. 总结

  • 核心功能

    • 模块化:将项目中的资源视为模块。

    • 依赖管理:通过依赖图管理模块之间的依赖关系。

    • 打包优化:通过 Loader 和 Plugin 实现代码转换和优化。

  • 适用场景

    • 适用于现代前端项目的构建和打包。

    • 支持多种资源类型(JS、CSS、图片等)。

  • 优化点

    • 代码分割(Code Splitting):按需加载,减少首屏加载时间。

    • 缓存优化:通过文件名哈希实现长效缓存。

    • Tree Shaking:移除未使用的代码。

产品思维的PM程序员~
工作1-3年,基础知识,多看书。多跟着别人做项目,学习经验。 工作3-5年,新知识,高级知识,自己独立做项目,总结经验。尝试不同的语言。 工作5-8年,工作职位,要从设计,管理方面要求自己,可以尝试走管理路线(项目经理或cto)。 工作10年及以上, 自己做些项目,产品,尝试为创业做准备。 上大学和不上大学区别很大,上品牌大学和普通大学区别也很大,后天的努力最大。 ---无论它是在遥远的远方,还是在出发的地方、哪里有希望哪里就是我们的方向;终点、只不过是梦想起飞的地方。