前端工程化-webpack原理

在这里插入图片描述

简介
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。

当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),

其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

webpack 就像一条生产线,要经过一系列处理流程后才能将源文件转换成输出结果。 

这条生产线上的每个处理流程的职责都是单一的,多个流程之间有存在依赖关系,

只有完成当前处理后才能交给下一个流程去处理。

 插件就像是一个插入到生产线中的一个功能,在特定的时机对生产线上的资源做处理。

webpack 通过 Tapable 来组织这条复杂的生产线。 webpack 在运行过程中会广播事件,

插件只需要监听它所关心的事件,就能加入到这条生产线中,去改变生产线的运作。 

webpack 的事件流机制保证了插件的有序性,使得整个系统扩展性很好。 
webpack 核心概念
1、entry
入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。

进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

每个依赖项随即被处理,最后输出到称之为 bundles 的文件中。
2、output
output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,
默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。
3、module
模块,在 Webpack 里一切皆模块,一个模块对应着一个文件。

Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。
4、Chunk
代码块,一个 Chunk 由多个模块组合而成,用于代码合并与分割。
5、loader
loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。

loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,

然后你就可以利用 webpack 的打包能力,对它们进行处理。

本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图(和最终的 bundle)

可以直接引用的模块。
6、plugin
loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。

插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,

可以用来处理各种各样的任务。
webpack构建内流程
Webpack 的运行流程是一个串行的过程,从启动到结束会依次执行以下流程 :

1、初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数。

2、开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,
执行对象的 run 方法开始执行编译。

3、确定入口:根据配置中的 entry 找出所有的入口文件。

4、编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,
再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理。

5、完成模块编译:在经过第 4 步使用 Loader 翻译完所有模块后,
得到了每个模块被翻译后的最终内容以及它们之间的依赖关系。

6、输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,
再把每个 Chunk 转换成一个单独的文件加入到输出列表,
这步是可以修改输出内容的最后机会。

7、输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。

在以上过程中,Webpack 会在特定的时间点广播出特定的事件,

插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用 Webpack 提供的 API 

改变 Webpack 的运行结果。

本文主要是介绍运行原理并不涉及具体配置,想看具体配置的话请看我的其他文章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值