webpack中的加载器和插件有什么区别?
在对插件的文件只是说:
使用插件添加通常与webpack中的捆绑包相关的功能。
我知道babel使用加载程序进行jsx / es2015转换,但是看起来其他常见任务(例如,copy-webpack-plugin)使用插件代替。
webpack中的加载器和插件有什么区别?
在对插件的文件只是说:
使用插件添加通常与webpack中的捆绑包相关的功能。
我知道babel使用加载程序进行jsx / es2015转换,但是看起来其他常见任务(例如,copy-webpack-plugin)使用插件代替。
webpack的核心只是文件捆绑器。考虑到一个非常简单的场景(不拆分代码),这可能意味着(高层)以下操作:
当您仔细检查以上步骤时,这会与Java编译器(或任何编译器)的行为产生共鸣。当然有区别,但是对加载程序和插件的理解无关紧要。
装载机:
之所以在这里是因为webpack承诺将任何文件类型捆绑在一起。
由于webpack的核心仅具有捆绑js文件的能力,因此,这一承诺意味着webpack核心团队必须合并构建流程,该流程允许外部代码以webpack可以使用的方式转换特定文件类型。
这些外部代码称为加载程序,它们通常在上述步骤1和3中运行。因此,由于这些装载机需要运行的阶段很明显,因此它们不需要挂钩,也不会影响构建过程(因为构建或捆绑只发生在步骤4)。
因此,加载器为编译做好了准备,它们在某种程度上扩展了webpack编译器的灵活性。
外挂程式:
之所以在这里,是因为即使webpack不能直接承诺变量输出,但全世界都希望得到它,而webpack确实允许它。
由于webpack的核心只是捆绑程序,而这样做却要经历几个步骤和子步骤,因此可以利用这些步骤来构建附加功能。
生产构建过程(最小化并写入文件系统)是webpack编译器的本机功能,例如,可以将其视为其核心功能的扩展(仅捆绑),并且可以将其视为本机插件。如果他们不提供,其他人会做。
查看上面的本机插件,似乎可以将webpack捆绑或编译分解为核心捆绑过程,以及可以关闭或自定义或扩展的许多本机插件过程。这意味着允许外部代码在他们可以选择的特定点(称为挂钩)加入绑定过程。
因此,插件会影响输出,并会扩展Webpack编译器的功能。
当您
require("my-loader!./my-awesome-module")
在代码中使用sth时,加载程序几乎可以对任何文件格式进行预处理转换。与插件相比,它们非常简单,因为它们(a)仅向webpack公开一个功能,并且(b)无法影响实际的构建过程。Plugins on the other hand can deeply integrate into webpack because they can register hooks within webpacks build system and access (and modify) the compiler, and how it works, as well as the compilation. Therefore, they are more powerful, but also harder to maintain.