En esencia, webpack es solo un paquete de archivos. Considerando un escenario muy simple (sin división de código), esto podría significar solo las siguientes acciones (en un nivel alto):
- encontrar el archivo de entrada y cargar su contenido en la memoria
- hacer coincidir cierto texto dentro del contenido y evaluarlos (por ejemplo, @import)
- encontrar las dependencias en base a una evaluación previa y hacer lo mismo con ellas
- coserlos todos en un paquete en la memoria
- escribir los resultados en el sistema de archivos
Cuando examina detenidamente los pasos anteriores, esto resuena con lo que hace un compilador de Java (o cualquier compilador). Por supuesto, hay diferencias, pero esas no importan para comprender los cargadores y los complementos.
Cargadores:
están aquí porque webpack promete agrupar cualquier tipo de archivo.
Dado que el paquete web en su núcleo solo es lo suficientemente capaz de agrupar archivos js, esta promesa significaba que el equipo central del paquete web tenía que incorporar flujos de compilación que permitían que el código externo transformara un tipo de archivo en particular de una manera que el paquete web pudiera consumir.
Estos códigos externos se denominan cargadores y normalmente se ejecutan durante los pasos 1 y 3 anteriores. Por lo tanto, dado que la etapa en la que estos cargadores deben ejecutarse es obvia, no requieren ganchos ni influyen en el proceso de compilación (ya que la compilación o el paquete solo ocurre en el paso 4).
Entonces, los cargadores preparan el escenario para la compilación y, en cierto modo, extienden la flexibilidad del compilador del paquete web.
Complementos:
están aquí porque aunque webpack no promete directamente una salida variable, el mundo lo quiere y webpack sí lo permite.
Dado que el paquete web en su esencia es solo un paquete y, sin embargo, pasa por varios pasos y subpasos para hacerlo, estos pasos se pueden utilizar para crear funciones adicionales.
El proceso de construcción de producción (minificación y escritura en el sistema de archivos), que es una capacidad nativa del compilador de paquetes web, por ejemplo, puede tratarse como una extensión de su capacidad central (que es simplemente empaquetar) y puede tratarse como un complemento nativo. Si no lo hubieran proporcionado, alguien más lo habría hecho.
Al observar el complemento nativo anterior, parece que la agrupación o compilación del paquete web se puede dividir en un proceso de agrupación central, además de una gran cantidad de procesos de complementos nativos que podemos desactivar, personalizar o ampliar. Esto significó permitir que el código externo se uniera al proceso de agrupación en puntos específicos entre los que pueden elegir (llamados ganchos).
Por lo tanto, los complementos influyen en la salida y en cierto modo amplían la capacidad del compilador de paquetes web.