核心概念
entry
:入口。webpack是基于模块的,使用webpack首先需要指定模块解析入口(entry),webpack从入口开始根据模块间依赖关系递归解析和处理所有资源文件。output
:输出。源代码经过webpack处理之后的最终产物。loader
:模块转换器。本质就是一个函数,在该函数中对接收到的内容进行转换,返回转换后的结果。因为 Webpack 只认识 JavaScript,所以 Loader 就成了翻译官,对其他类型的资源进行转译的预处理工作。plugin
:扩展插件。基于事件流框架Tapable
,插件可以扩展 Webpack 的功能,在 Webpack 运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在合适的时机通过 Webpack 提供的 API 改变输出结果。module
:模块。除了js范畴内的es module、commonJs、AMD
等,css @import、url(...)
、图片、字体等在webpack中都被视为模块。
解释几个 webpack 中的术语
module
:指在模块化编程中我们把应用程序分割成的独立功能的代码模块chunk
:指模块间按照引用关系组合成的代码块,一个chunk
中可以包含多个module
chunk group
:指通过配置入口点(entry point
)区分的块组,一个chunk group
中可包含一到多个 chunkbundling
:webpack 打包的过程asset/bundle
:打包产物
webpack 的打包思想可以简化为 3 点:
- 一切源代码文件均可通过各种
Loader
转换为 JS 模块 (module
),模块之间可以互相引用。 - webpack 通过入口点(
entry point
)递归处理各模块引用关系,最后输出为一个或多个产物包js(bundle)
文件。 - 每一个入口点都是一个块组(
chunk group
),在不考虑分包的情况下,一个chunk group
中只有一个chunk
,该 chunk 包含递归分析后的所有模块。每一个chunk
都有对应的一个打包后的输出文件(asset/bundle
)
打包流程
- 初始化参数:从配置文件和 Shell 语句中