来,我们看官方概念: webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时,它会在内部构建一个 依赖图(dependency graph),此依赖图会映射项目所需的每个模块,并生成一个或多个 bundle。
内部如何构建一个依赖图,我们知道 webpack 会配置一个入口,这就是从这入口文件开始, 找到所有被依赖到的文件,比如其他 js / image / json 文件等,然后通过 loader 对这些文件进行处理、编译、打包、优化,生成一个 bundle 或者多个 bundle。
通过以上,主要就是找依赖, 通过配置处理相应环境,根据你的需要配置插件进行优化(如 profill、babel、 miniSize etc) 打包出文件,可以放到服务器上运行。
关于找依赖,可以想到关于模块化的语法: import 、require、@import etc, 通过解析对应的语法寻找相应的依赖。然后通过读取依赖到的文件,根据对应的 loader 进行处理文件,最后根据你的插件配置,分割,压缩或注入等,根据 output config输出到对应的文件夹。
想象抖一抖树,枯萎的叶子就会脱落。 这里指的是把没有用到的代码删除掉,从而减小文件的大小。通过这一优化,在引用多个第三方库时,能够大大的减少你的文件大小,但请确定这个包是没有副作用的。