Compiler 和 Compilation 都是继承自 Tapable。两个类都有自己生命周期,即有自己不同的 Hook,通过添加对应 Hook 事件,可以拿到各自生命周期关键数据和对象。

    区别:

    • Compiler 是每次 Webpack 全部生命周期的对象,而 Compilation 是 Webpack 中每次构建过程的生命周期对象,Compilation 是通过 Compiler 创建的实例。
    • Compiler 是每个 Webpack 的配置,对应一个 Compiler 对象,记录着整个 Webpack 的生命周期;在构建的过程中,每次构建都会产生一次 Compilation,Compilation 是构建周期的产物。

    Compilation 有个很重要的对象是 Stats 对象,通过这个对象可以得到 Webpack 打包后的所有 modulechunkassets 信息,通过分析 Stats 对象可以得到很多有用的信息,比如 webpack-bundle-analyzer 这类分析打包结果的插件都是通过分析 Stats 对象来得到分析报告的。

    Webpack 中lib/Stats.js的源码也值得看下,对于分析打包结果和编写插件都有很大的启发。