Der css-loader-Schema-Validierungsfehler ist einer der häufigsten Webpack-Build-Fehler - er tritt auf, bevor die Kompilierung überhaupt beginnt, und liefert einen Fehlerpfad, der kryptisch wirkt, bis man ihn zu lesen weiß. Dieser Leitfaden erklärt genau, was diese Fehler auslöst, wie man die Meldung entziffert, welche webpack.config.js-Änderungen welchen Fall beheben und wie man die Konfiguration validiert, damit der nächste Build beim ersten Versuch gelingt.
Was ist ein Schema-Validierungsfehler?
Webpack validiert das Optionsobjekt jedes Loaders vor dem Start der Kompilierung gegen ein JSON-Schema. Dieses Schema definiert, welche Eigenschaften erlaubt sind, welche Typen sie akzeptieren und welche Werte gültig sind. Wenn Ihre Konfiguration eine Eigenschaft übergibt, die das Schema nicht kennt - oder den falschen Typ für eine bekannte Eigenschaft - wirft Webpack einen Schema-Validierungsfehler und verweigert den Build.
Warum die Validierung vor der Kompilierung stattfindet
Webpack validiert vorab, weil Loader-Optionen beeinflussen, wie Dateien verarbeitet werden. Eine ungültige Option könnte stillschweigend eine falsche Ausgabe erzeugen, wenn Webpack sie ignorieren würde; daher ist die strikte Validierung beim Start das sicherere Design. Der Nachteil ist ein harter Stopp, bevor Code angefasst wird - aber die Fehlermeldung sagt Ihnen immer genau, welche Option falsch ist und wo sie in Ihrem Konfigurationsbaum liegt.
Das Fehlerformat
Ein css-loader-Schema-Validierungsfehler folgt einer vorhersagbaren Struktur. Er enthält immer den Loader-Namen (css-loader), den Pfad zur betroffenen Option in Ihrem Konfigurationsobjekt (z. B. options.localIdentName), das konkrete Problem (`unbekannte Eigenschaft, sollte einer der erlaubten Werte sein oder sollte vom Typ [Typ] sein`) und oft einen Link zur Dokumentation des Loaders. Zuerst den Pfad zu lesen ist immer der schnellste Weg zur Lösung.
Note
Warum css-loader sie auslöst
css-loader hat über seine Hauptversionen hinweg erhebliche Änderungen am Optionsschema durchlaufen. Entwickler, die css-loader aktualisieren - oder eine webpack.config.js aus einem Tutorial für eine andere Version kopieren - enden häufig mit Optionen, die in einer älteren Version gültig waren, inzwischen aber unbekannt oder umstrukturiert sind.
Alle CSS-Modules-Optionen wurden unter die Option modules verschoben, um Verschmutzung der Optionen auf oberster Ebene zu vermeiden und die Schema-Klarheit zu verbessern.
Der Breaking Change der v4
Die häufigste Quelle von css-loader-Schemafehlern ist die Migration v3 → v4. In css-loader v3 lagen die CSS-Modules-Optionen auf oberster Ebene des Optionsobjekts: localIdentName, camelCase, minimize und modules als Boolescher Wert. In v4 zogen alle CSS-Modules-Optionen in ein eigenes modules-Unterobjekt, und minimize wurde komplett entfernt (die CSS-Minifizierung gehört nun zu css-minimizer-webpack-plugin). Jedes Projekt, das noch die flache v3-Syntax mit einer v4+-Installation nutzt, löst sofort einen Schema-Validierungsfehler aus.
Weitere häufige Auslöser
- Tippfehler in Optionsnamen - moduls statt modules, localIdentiyName statt localIdentName
- Falscher Werttyp - ein String, wo ein Objekt erforderlich ist, oder eine Zahl, wo ein Boolean erwartet wird
- Entfernte Optionen - minimize (in v4 entfernt), importLoaders als Boolean (muss eine Zahl sein), camelCase (in v6 entfernt)
- Configs aus Tutorials der falschen Version kopiert - Stack-Overflow-Antworten zu css-loader v2 werden von Suchmaschinen noch immer häufig ausgeliefert
- Konfliktierende Peer-Dependencies - ein Drittanbieter-Paket pinnt eine ältere css-loader-Version, die mit Ihrer Config inkompatibel ist
Tip
Die Fehlermeldung lesen
Jeder css-loader-Schema-Validierungsfehler enthält die Informationen, die Sie zu seiner Behebung brauchen - sofern Sie die Pfadnotation zu lesen wissen. Die Meldung hat drei relevante Teile: den Loader-Namen, den Konfigurationspfad und die konkrete Problembeschreibung. Konzentrieren Sie sich in dieser Reihenfolge darauf.
Die Pfadnotation verstehen
Die Pfadnotation spiegelt die Struktur Ihrer webpack.config.js wider. Ein Pfad wie module.rules[0].use[1].options.localIdentName bedeutet: Schauen Sie auf den Schlüssel module, dann rules, dann das erste Array-Element (Index 0), dann use, dann den zweiten Loader in diesem use-Array (Index 1), dann options und schließlich die Eigenschaft localIdentName. Folgen Sie diesem Pfad in Ihrer Konfigurationsdatei, um die exakte Zeile zu finden, die den Fehler verursacht.
Die drei Fehler-Subtypen
| Fehler-Subtyp | Meldung enthält | Bedeutung | Lösung |
|---|---|---|---|
| Unbekannte Eigenschaft | "has an unknown property" | Die Eigenschaft existiert in dieser Version nicht | Eigenschaft entfernen oder umbenennen |
| Falscher Typ | "should be a [type]" | Richtige Eigenschaft, falscher Werttyp | Wert auf den korrekten Typ ändern |
| Ungültiger Wert | "should be one of the allowed" | Richtige Eigenschaft, Wert nicht im erlaubten Set | Einen der aufgelisteten gültigen Werte verwenden |
| Zusätzliche Eigenschaft | "additionalProperties is false" | Das Objekt enthält Schlüssel außerhalb des Schemas | Nicht gelistete Schlüssel aus dem Objekt entfernen |
Der Subtyp „sollte einer der erlaubten Werte sein“ listet die gültigen Optionen immer direkt im Fehler auf. Der Subtyp „unbekannte Eigenschaft“ schlägt keine Alternativen vor - Sie müssen die aktuelle css-loader-Dokumentation nach dem neuen Namen oder Äquivalent der Eigenschaft prüfen. Verwenden Sie den Webpack Config Validator, um alle Fehler auf einmal zu erhalten, statt sie durch wiederholte Builds einzeln zu entdecken.
Warning
css-loader-Fehler beheben
Die Lösung ist immer eine gezielte Änderung am css-loader-Optionsobjekt in Ihrer webpack.config.js. Arbeiten Sie diese Schritte der Reihe nach ab, um den Fehler sauber zu beheben, ohne neue einzuschleppen.
Vollständige Fehlermeldung lesen und Pfad kopieren
Scrollen Sie am Stack Trace vorbei zum Abschnitt ValidationError und kopieren Sie die vollständige Meldung. Sie nennt den Loader (css-loader), den exakten Konfigurationspfad und das Problem. Der Pfad verrät, welcher rules-Eintrag und welche Position im use-Array das ungültige Optionsobjekt enthält.
Die Regel in webpack.config.js lokalisieren
Finden Sie den module.rules-Eintrag, der .css-Dateien lädt. Er sieht typischerweise aus wie ein test auf .css-Dateien mit style-loader und css-loader samt Optionsobjekt. Das Optionsobjekt innerhalb des css-loader-Eintrags ist der Ursprung aller Schemafehler. Öffnen Sie dieses Objekt und vergleichen Sie es mit der Liste der gültigen Optionen Ihrer installierten css-loader-Version.
Die passende Lösung für Ihren Fehler-Subtyp anwenden
Bei einem unbekannte-Eigenschaft-Fehler: Benennen Sie die Eigenschaft um oder verschieben Sie sie an ihren neuen Ort. localIdentName wird zu modules.localIdentName. minimize ist entfernt - installieren Sie css-minimizer-webpack-plugin separat. camelCase ist entfernt - verwenden Sie stattdessen die Option exportLocalsConvention im modules-Objekt. Bei einem falscher-Typ-Fehler: Konvertieren Sie modules: true in ein Objekt mit mode: 'local', falls Sie eine CSS-Modules-Konfiguration benötigen, oder belassen Sie es als Boolean, wenn nicht.
Die korrigierte Config vor dem Neuaufbau validieren
Fügen Sie die aktualisierte webpack.config.js in den Webpack Config Validator ein, um zu bestätigen, dass alle Schemafehler behoben sind, bevor Sie den vollständigen Build ausführen. So werden Sekundärfehler der Korrektur erkannt und ein weiterer Build-Zyklus gespart.
Webpack Config Validator
Fügen Sie Ihre webpack.config.js ein und validieren Sie sofort alle Loader-Optionen - erkennt css-loader-Schemafehler, ungültige Modulregeln und Ausgabekonfigurationsfehler vor Ihrem nächsten Build.
Häufige css-loader-Konfigurationsfehler
Dies sind die spezifischen Optionsfehler, die in css-loader-Schema-Validierungsfehlern am häufigsten auftreten. Jeder Eintrag zeigt das defekte Konfigurationsmuster, die korrekte Ersetzung und die css-loader-Version, auf die sich die Änderung bezieht.
localIdentName auf oberster Ebene (v3 → v4)
In css-loader v3 war localIdentName eine Option auf oberster Ebene, die die Generierung der CSS-Modules-Klassennamen steuerte. Ab v4 wurde sie in das modules-Objekt verschoben. Die Lösung: Verschachteln Sie sie in modules mit der Eigenschaft localIdentName auf Ihrem Muster. Die Fehlermeldung lautet options has an unknown property 'localIdentName' - das ist der css-loader-Migrationsfehler Nummer eins.
Option minimize entfernt (v4+)
Die Option minimize wurde in css-loader v4 entfernt. Die CSS-Minifizierung wird nun separat von css-minimizer-webpack-plugin im Array optimization.minimizer übernommen. Entfernen Sie minimize vollständig aus Ihren css-loader-Optionen und fügen Sie css-minimizer-webpack-plugin zu Ihrem Build hinzu, wenn Minifizierung nötig ist. Der CSS Validator kann helfen zu prüfen, ob das ausgegebene CSS nach dem Wechsel des Minifizierungswerkzeugs korrekt ist.
Option camelCase entfernt (v6)
css-loader v6 entfernte die Option camelCase auf oberster Ebene. Der Ersatz ist modules.exportLocalsConvention, die camelCase, camelCaseOnly, dashes oder dashesOnly akzeptiert. Aktualisieren Sie Ihre Optionen, um exportLocalsConvention im modules-Objekt zu setzen. Ohne diese Änderung löst jede v6-Installation mit der alten camelCase-Eigenschaft einen Fehler „unbekannte Eigenschaft“ aus.
| Alte Option (defekt) | css-loader-Version | Korrekte Ersetzung |
|---|---|---|
| options.localIdentName | v4+ | options.modules.localIdentName |
| options.minimize | v4+ | Plugin css-minimizer-webpack-plugin |
| options.camelCase | v6+ | options.modules.exportLocalsConvention |
| options.modules: true | v4+ (zur Anpassung) | options.modules: { mode: "local", ... } |
| options.importLoaders: true | alle | options.importLoaders: 1 (Zahl, kein Boolean) |
| options.sourceMap: "inline" | v4+ | options.sourceMap: true (nur Boolean) |
Note
Die Webpack-Konfiguration validieren
Der effizienteste Weg, css-loader-Schemafehler zu beheben - besonders nach einem Major-Upgrade -, ist die Validierung der gesamten webpack.config.js auf einmal, statt Fehler Build für Build zu entdecken. Mehrere Tools machen das schnell.
Der Webpack Config Validator
Der Webpack Config Validator nimmt Ihre vollständige webpack.config.js entgegen und meldet alle Schema-Verstöße über jeden Loader, jedes Plugin und jede Option auf oberster Ebene in einem einzigen Durchlauf. Er zeigt dieselbe Pfadnotation, die Webpack in Laufzeitfehlern verwendet, sodass Sie die Ausgabe mit dem im Terminal gesehenen Fehler abgleichen können. Config einfügen, alle Probleme auf einmal erhalten, beheben, erneut einfügen zur Bestätigung - kein Build-Zyklus nötig.
Zuerst die Konfigurationsdatei auf JavaScript-Syntaxfehler prüfen
Wenn Webpack Ihre webpack.config.js wegen eines JavaScript-Syntaxfehlers nicht einmal parsen kann - unpassende Klammern, ein fehlendes Komma oder ein ungültiger Spread - sehen Sie einen Node.js-Parse-Fehler statt eines Schema-Validierungsfehlers. Nutzen Sie den JavaScript Syntax Validator, um Syntaxprobleme auszuschließen, bevor Sie die Schema-Validierung debuggen.
Verwandte Konfigurationsdateien validieren
css-loader ist selten die einzige Konfigurationsdatei in einer Build-Pipeline. Verwenden Sie PostCSS für Transformationen, erkennt der PostCSS Config Validator Fehler in der Plugin-Reihenfolge und fehlende Abhängigkeiten in postcss.config.js. Nutzen Sie stylelint für CSS-Qualitätsprüfungen, validiert der Stylelint Config Validator Ihre .stylelintrc, bevor er den Build stört. Der ESLint Config Validator ist nützlich, wenn Ihre Build-Kette auch ESLint ausführt - Fehlkonfigurationen dort können als Build-Fehler auftreten, die Loader-Fehlern ähneln.
PostCSS Config Validator
Validieren Sie postcss.config.js auf Plugin-Reihenfolge und Optionsfehler - erkennt Konfigurationsprobleme, die häufig zusammen mit css-loader-Schemafehlern in komplexen Webpack-Setups auftreten.
css-loader mit PostCSS und CSS Modules
Die meisten Webpack-Produktionssetups nutzen css-loader zusammen mit PostCSS und CSS Modules. Jedes fügt eigene Optionen und eigene potenzielle Schemafehler hinzu. Wer ihre Interaktion versteht, vermeidet die häufigsten Konfigurationskonflikte.
Die Option importLoaders
Läuft PostCSS vor css-loader über eine CSS-Datei, müssen Sie in den css-loader-Optionen importLoaders: 1 (oder höher) setzen, damit auch die @import-Anweisungen im CSS von PostCSS verarbeitet werden. Ohne diesen Wert umgehen importierte Dateien PostCSS. Ein häufiger Fehler ist importLoaders: true - das löst einen Schema-Validierungsfehler aus, da die Option eine Zahl, kein Boolean sein muss. Setzen Sie sie auf die Anzahl der Loader, die in der Kette vor css-loader laufen.
CSS Modules mit benutzerdefinierten Klassennamen
Die Anpassung von CSS-Modules-Klassennamen zog in css-loader v4 in das modules-Unterobjekt. Eine vollständige CSS-Modules-Konfiguration mit eigenem Identitätsmuster nutzt mode, localIdentName und exportLocalsConvention - jede als eigene Option mit eigenen Schema-Beschränkungen. Eine davon auf oberster Ebene von options statt in modules zu übergeben, erzeugt einen Fehler „unbekannte Eigenschaft“.
Optionen url und import
Die Optionen url und import von css-loader steuern, ob der Loader url()-Verweise und @import-Anweisungen auflöst. Beide akzeptieren entweder einen Boolean oder ein Objekt mit Filterfunktion. Eine bloße Funktion zu übergeben - statt eines Objekts mit filter-Eigenschaft - löst einen Schemafehler aus, da das Optionsschema ein Objekt mit filter-Eigenschaft erwartet, keine nackte Funktion. Wickeln Sie Filterfunktionen stets in die erwartete Objektform ein.
Warning
Key takeaways
- css-loader-Schema-Validierungsfehler treten vor der Kompilierung auf und nennen immer den exakten Pfad der ungültigen Option - lesen Sie zuerst den Pfad, nicht den Stack Trace.
- Die häufigste Ursache ist die Verwendung der css-loader-v3-Optionssyntax (flaches localIdentName, minimize, camelCase) mit einer v4+- oder v6+-Installation.
- In css-loader v4+ ziehen alle CSS-Modules-Optionen in ein modules-Unterobjekt - localIdentName wird zu modules.localIdentName.
- minimize wurde in v4 entfernt - verwenden Sie stattdessen css-minimizer-webpack-plugin in optimization.minimizer.
- importLoaders muss eine Zahl sein (z. B. 1), kein Boolean - true zu übergeben löst einen Typ-Validierungsfehler aus.
- Verwenden Sie den Webpack Config Validator, um alle Schemafehler in einem Durchlauf zu erkennen, bevor Sie neu bauen.
- Prüfen Sie auch verwandte Configs - Fehlkonfigurationen in PostCSS, ESLint und Stylelint begleiten css-loader-Fehler häufig in komplexen Pipelines.