Webpack ist im Kern nur ein Dateibündler. In Anbetracht eines sehr einfachen Szenarios (keine Codeaufteilung) kann dies nur die folgenden Aktionen bedeuten (auf hoher Ebene):
- Suchen Sie die Eingabedatei und laden Sie ihren Inhalt in den Speicher
- Ordnen Sie bestimmten Text innerhalb des Inhalts zu und bewerten Sie diese (z. B. @import).
- Finden Sie die Abhängigkeiten basierend auf der vorherigen Bewertung und machen Sie dasselbe mit ihnen
- nähen Sie sie alle zu einem Bündel im Speicher
- Schreiben Sie die Ergebnisse in das Dateisystem
Wenn Sie die obigen Schritte genau untersuchen, stimmt dies mit dem überein, was ein Java-Compiler (oder ein beliebiger Compiler) tut. Es gibt natürlich Unterschiede, aber diese sind nicht wichtig, um Loader und Plugins zu verstehen.
Lader:
sind hier, weil Webpack verspricht, jeden Dateityp zu bündeln.
Da Webpack im Kern nur in der Lage ist, js-Dateien zu bündeln, bedeutete dieses Versprechen, dass das Webpack-Kernteam Build-Flows einbeziehen musste, die es externem Code ermöglichten, einen bestimmten Dateityp so zu transformieren, dass Webpack ihn nutzen konnte.
Diese externen Codes werden als Loader bezeichnet und normalerweise in den obigen Schritten 1 und 3 ausgeführt. Da die Phase, in der diese Loader ausgeführt werden müssen, offensichtlich ist, benötigen sie keine Hooks und beeinflussen auch nicht den Build-Prozess (da der Build oder das Bundle erst in Schritt 4 erfolgt).
Loader bereiten also die Bühne für die Kompilierung vor und erweitern sozusagen die Flexibilität des Webpack-Compilers.
Plugins:
sind hier, weil, obwohl Webpack nicht direkt variable Ausgabe verspricht, die Welt es will und Webpack es erlaubt.
Da das Webpack im Kern nur ein Bündler ist und dabei mehrere Schritte und Unterschritte durchläuft, können diese Schritte verwendet werden, um zusätzliche Funktionen einzubauen.
Der Produktionserstellungsprozess (Minimieren und Schreiben in ein Dateisystem), der beispielsweise eine native Funktion des Webpack-Compilers ist, kann als Erweiterung seiner Kernfunktion (die nur gebündelt wird) behandelt und wie ein natives Plugin behandelt werden. Hätten sie es nicht zur Verfügung gestellt, hätte es jemand anderes getan.
Wenn man sich das native Plugin oben ansieht, sieht es so aus, als ob die Webpack-Bündelung oder -Kompilierung in einen Kern-Bündelungsprozess sowie viele native Plugin-Prozesse unterteilt werden kann, die wir deaktivieren oder anpassen oder erweitern können. Dies bedeutete, dass externer Code an bestimmten Punkten, aus denen sie auswählen können (sogenannte Hooks), am Bündelungsprozess teilnehmen kann.
Plugins beeinflussen daher die Ausgabe und erweitern die Fähigkeit des Webpack-Compilers.