Answers:
从本质上讲,webpack只是一个文件捆绑器。考虑到一个非常简单的场景(不拆分代码),这可能意味着(高级别)执行以下操作:
当您仔细检查以上步骤时,这会与Java编译器(或任何编译器)的作用产生共鸣。当然有区别,但是对加载程序和插件的理解无关紧要。
装载机:
之所以在这里,是因为webpack承诺将任何文件类型捆绑在一起。
由于webpack的核心功能仅能捆绑js文件,因此,这一承诺意味着webpack核心团队必须合并构建流程,该流程允许外部代码以webpack可以使用的方式转换特定文件类型。
这些外部代码称为加载程序,它们通常在上述步骤1和3中运行。因此,由于这些加载器需要运行的阶段很明显,因此它们不需要挂钩,也不会影响构建过程(因为构建或捆绑只发生在步骤4)。
因此,加载器为编译做好了准备,它们在某种程度上扩展了webpack编译器的灵活性。
外挂程式:
之所以在这里,是因为即使webpack不能直接承诺变量输出,但全世界都希望得到它,而webpack确实允许它。
由于webpack的核心只是捆绑程序,而这样做却要经历几个步骤和子步骤,因此可以利用这些步骤来构建附加功能。
生产构建过程(最小化并写入文件系统)是webpack编译器的本机功能,例如,可以将其视为其核心功能的扩展(仅捆绑),并且可以将其视为本机插件。如果他们不提供,其他人会做。
查看上面的本机插件,似乎可以将webpack捆绑或编译分解为核心捆绑过程,以及可以关闭,自定义或扩展的许多本机插件过程。这意味着允许外部代码在他们可以选择的特定点(称为挂钩)加入绑定过程。
因此,插件会影响输出,并会扩展Webpack编译器的功能。