Aller au contenu
Aback Tools Logo

Corriger les Erreurs de Validation de Schéma de css-loader dans Webpack

Comment décoder et corriger les erreurs de validation de schéma de css-loader dans Webpack : les changements breaking de la v4, table de migration des options, lecture des chemins d'erreur et validation de webpack.config.js avant votre prochain build.

DH
Tutorials & How-Tos12 min de lecture2,650 mots

L'erreur de validation de schéma de css-loader est l'un des échecs de build les plus courants de Webpack - elle se déclenche avant même le début de la compilation et fournit un chemin d'erreur qui paraît cryptique tant qu'on ne sait pas le lire. Ce guide explique exactement ce qui déclenche ces erreurs, comment décoder le message, quelles modifications de webpack.config.js corrigent chaque cas, et comment valider votre configuration pour que le prochain build réussisse dès la première tentative.

v4+Changement breaking de css-loaderOptions restructurées en v4
100%Détection pré-buildErreurs déclenchées avant la compilation
0Fichiers compilés en cas d'erreurLe build s'arrête immédiatement

Qu'est-ce qu'une erreur de validation de schéma ?

Webpack valide l'objet d'options de chaque loader par rapport à un schéma JSON avant de commencer à compiler. Ce schéma définit quelles propriétés sont autorisées, quels types elles acceptent et quelles valeurs sont valides. Lorsque votre configuration passe une propriété que le schéma ne reconnaît pas - ou passe le mauvais type pour une propriété connue - Webpack lève une erreur de validation de schéma et refuse de builder.

Pourquoi la validation a lieu avant la compilation

Webpack valide en amont car les options des loaders affectent la façon dont les fichiers sont traités. Une option invalide pourrait produire silencieusement une sortie incorrecte si Webpack l'ignorait ; la validation stricte au démarrage est donc le choix le plus sûr. La contrepartie est un arrêt brutal avant de toucher au moindre code - mais le message d'erreur vous dit toujours précisément quelle option est en cause et où elle se situe dans votre arbre de configuration.

Le format de l'erreur

Une erreur de validation de schéma de css-loader suit une structure prévisible. Elle contient toujours le nom du loader (css-loader), le chemin de l'option fautive dans votre objet de configuration (ex. options.localIdentName), le problème précis (`propriété inconnue, devrait être l'une des valeurs autorisées ou devrait être [type]`), et souvent un lien vers la documentation du loader. Lire d'abord le chemin est toujours la voie la plus rapide vers la correction.

Note

Les erreurs de validation de schéma sont levées par le package schema-utils intégré à Webpack, pas par css-loader lui-même. Tous les loaders Webpack qui utilisent schema-utils pour valider leurs options produisent des erreurs dans ce même format - la compétence de lecture de ces messages s'applique donc à tous les loaders, pas seulement css-loader.

Pourquoi css-loader les déclenche

css-loader a connu des changements significatifs de schéma d'options entre ses versions majeures. Les développeurs qui mettent à jour css-loader - ou copient un webpack.config.js depuis un tutoriel visant une autre version - se retrouvent fréquemment avec des options qui étaient valides dans une version antérieure mais sont désormais inconnues ou restructurées.

Toutes les options CSS Modules ont été déplacées sous l'option modules afin d'éviter la pollution des options de premier niveau et d'améliorer la clarté du schéma.

- css-loader changelog, v4.0.0

Le changement breaking de la v4

La source la plus fréquente d'erreurs de schéma css-loader est la migration v3 → v4. Dans css-loader v3, les options CSS Modules se trouvaient au premier niveau de l'objet d'options : localIdentName, camelCase, minimize et modules en booléen. En v4, toutes les options CSS Modules ont été regroupées dans un sous-objet modules dédié, et minimize a été supprimée (la minification CSS appartient désormais à css-minimizer-webpack-plugin). Tout projet utilisant encore la syntaxe plate de la v3 avec une installation v4+ déclenche immédiatement une erreur de validation de schéma.

Autres déclencheurs courants

  • Fautes de frappe dans les noms d'options - moduls au lieu de modules, localIdentiyName au lieu de localIdentName
  • Mauvais type de valeur - passer une chaîne là où un objet est requis, ou un nombre là où un booléen est attendu
  • Options supprimées - minimize (supprimée en v4), importLoaders en booléen (doit être un nombre), camelCase (supprimée en v6)
  • Copier des configs de tutoriels d'une autre version - les réponses Stack Overflow visant css-loader v2 sont toujours largement servies par les moteurs de recherche
  • Dépendances peer conflictuelles - un package tiers épinglé sur une version antérieure de css-loader incompatible avec votre config

Tip

Avant de déboguer le message d'erreur, lancez npm ls css-loader (ou yarn why css-loader) pour confirmer la version réellement installée. La version de votre package.json et celle sur le disque peuvent différer après une installation ratée ou un conflit de dépendances. Corrigez toujours d'abord le décalage de versions.

Lire le message d'erreur

Chaque erreur de validation de schéma de css-loader contient les informations nécessaires à sa correction - à condition de savoir lire la notation de chemins. Le message comporte trois parties qui comptent : le nom du loader, le chemin de configuration et la description précise du problème. Concentrez-vous sur elles dans cet ordre.

Comprendre la notation de chemins

La notation de chemins reflète la structure de votre webpack.config.js. Un chemin comme module.rules[0].use[1].options.localIdentName signifie : regardez la clé module, puis rules, puis le premier élément du tableau (index 0), puis use, puis le deuxième loader de ce tableau use (index 1), puis options, puis la propriété localIdentName. Suivez ce chemin dans votre fichier de config pour trouver la ligne exacte à l'origine de l'erreur.

Les trois sous-types d'erreur

Sous-type d'erreurLe message contientCe que cela signifieCorrection
Propriété inconnue"has an unknown property"La propriété n'existe pas dans cette versionSupprimer ou renommer la propriété
Mauvais type"should be a [type]"Bonne propriété, mauvais type de valeurChanger la valeur pour le type correct
Valeur invalide"should be one of the allowed"Bonne propriété, valeur hors de l'ensemble autoriséUtiliser une des valeurs valides listées
Propriété additionnelle"additionalProperties is false"L'objet a des clés absentes du schémaRetirer les clés non listées de l'objet

Le sous-type « devrait être l'une des valeurs autorisées » liste toujours les options valides en ligne dans l'erreur. Le sous-type « propriété inconnue » ne suggère pas d'alternatives - il faut consulter la documentation actuelle de css-loader pour le nouveau nom ou l'équivalent de la propriété. Utilisez le Validateur de Configuration Webpack pour obtenir toutes les erreurs d'un coup plutôt que de les découvrir une par une à coups de builds répétés.

Warning

Webpack signale les erreurs de validation de schéma une par une par défaut - corriger la première puis rebuilder peut en révéler une seconde. Si votre configuration a traversé une montée de version majeure, collez d'abord toute la config dans le [Validateur de Configuration Webpack](/tools/data/validators/webpack-config-validator) pour voir toutes les erreurs simultanément avant toute modification.

Comment corriger les erreurs css-loader

La correction est toujours une modification ciblée de l'objet d'options css-loader dans votre webpack.config.js. Suivez ces étapes dans l'ordre pour résoudre l'erreur proprement sans en introduire de nouvelles.

1

Lisez le message d'erreur complet et copiez le chemin

Faites défiler au-delà de la pile d'appels jusqu'à la section ValidationError et copiez le message complet. Il nomme le loader (css-loader), le chemin de configuration exact et le problème. Le chemin indique quelle entrée rules et quelle position du tableau use contient l'objet d'options invalide.

2

Repérez la règle dans webpack.config.js

Trouvez l'entrée module.rules qui charge les fichiers .css. Elle ressemble généralement à un test sur les fichiers .css utilisant style-loader et css-loader avec un objet d'options. L'objet d'options au sein de l'entrée css-loader est l'endroit où naissent toutes les erreurs de schéma. Ouvrez cet objet et comparez-le à la liste des options valides pour votre version installée de css-loader.

3

Appliquez la correction adaptée à votre sous-type d'erreur

Pour une erreur de propriété inconnue : renommez ou déplacez la propriété vers son nouvel emplacement. localIdentName devient modules.localIdentName. minimize est supprimée - installez css-minimizer-webpack-plugin séparément. camelCase est supprimée - utilisez l'option exportLocalsConvention dans l'objet modules à la place. Pour une erreur de mauvais type : convertissez modules: true en un objet avec mode: 'local' si vous avez besoin d'une configuration CSS Modules, ou conservez-le en booléen sinon.

4

Validez la config corrigée avant de rebuilder

Collez le webpack.config.js mis à jour dans le Validateur de Configuration Webpack pour confirmer que toutes les erreurs de schéma sont résolues avant de lancer le build complet. Cela détecte les erreurs secondaires introduites par la correction et vous épargne un cycle de build supplémentaire.

Validateur de Configuration Webpack

Collez votre webpack.config.js et validez instantanément toutes les options de loaders - détecte les erreurs de schéma css-loader, les règles de module invalides et les erreurs de configuration de sortie avant votre prochain build.

Open tool

Erreurs de configuration css-loader courantes

Voici les erreurs d'options spécifiques qui apparaissent le plus souvent dans les échecs de validation de schéma de css-loader. Chaque entrée montre le motif de config défaillant, le remplacement correct et la version de css-loader concernée par le changement.

localIdentName au premier niveau (v3 → v4)

Dans css-loader v3, localIdentName était une option de premier niveau contrôlant la génération des noms de classes CSS Modules. En v4+, elle a été déplacée dans l'objet modules. La correction consiste à l'imbriquer dans modules avec la propriété localIdentName réglée sur votre motif. Le message d'erreur indique options has an unknown property 'localIdentName' - c'est l'erreur de migration css-loader numéro un.

Option minimize supprimée (v4+)

L'option minimize a été supprimée de css-loader en v4. La minification CSS est désormais gérée séparément par css-minimizer-webpack-plugin dans le tableau optimization.minimizer. Retirez minimize de vos options css-loader et ajoutez css-minimizer-webpack-plugin à votre build si la minification est nécessaire. Le Validateur CSS peut vous aider à vérifier que le CSS de sortie est correct après changement d'outil de minification.

Option camelCase supprimée (v6)

css-loader v6 a supprimé l'option camelCase de premier niveau. Le remplacement est modules.exportLocalsConvention, qui accepte camelCase, camelCaseOnly, dashes ou dashesOnly. Mettez à jour vos options pour définir exportLocalsConvention dans l'objet modules. Sans ce changement, toute installation v6 avec l'ancienne propriété camelCase déclenche une erreur de propriété inconnue.

Ancienne option (défaillante)Version css-loaderRemplacement correct
options.localIdentNamev4+options.modules.localIdentName
options.minimizev4+plugin css-minimizer-webpack-plugin
options.camelCasev6+options.modules.exportLocalsConvention
options.modules: truev4+ (pour personnaliser)options.modules: { mode: "local", ... }
options.importLoaders: truetoutesoptions.importLoaders: 1 (nombre, pas booléen)
options.sourceMap: "inline"v4+options.sourceMap: true (booléen uniquement)

Note

La liste complète des options valides pour votre version de css-loader est toujours disponible dans le fichier de schéma options.json du loader sur GitHub. Rendez-vous sur webpack-contrib/css-loader, sélectionnez le tag de votre version et ouvrez src/options.json - c'est le schéma exact contre lequel Webpack valide.

Valider votre configuration webpack

La manière la plus efficace de résoudre les erreurs de schéma css-loader - surtout après une montée de version majeure - est de valider l'ensemble du webpack.config.js d'un coup plutôt que de découvrir les erreurs un build à la fois. Plusieurs outils rendent cela rapide.

Le Validateur de Configuration Webpack

Le Validateur de Configuration Webpack accepte votre webpack.config.js complet et signale toutes les violations de schéma de chaque loader, plugin et option de premier niveau en une seule passe. Il affiche la même notation de chemins que Webpack utilise dans ses erreurs d'exécution, ce qui permet de croiser la sortie avec l'erreur vue dans votre terminal. Collez votre config, obtenez tous les problèmes d'un coup, corrigez-les, puis recollez pour confirmer - aucun cycle de build requis.

Vérifier d'abord le fichier de config pour des erreurs de syntaxe JavaScript

Si Webpack échoue même à parser votre webpack.config.js à cause d'une erreur de syntaxe JavaScript - accolades désappariées, virgule manquante ou spread invalide - vous verrez une erreur de parsing Node.js plutôt qu'une erreur de validation de schéma. Utilisez le Validateur de Syntaxe JavaScript pour écarter les problèmes de syntaxe avant de déboguer la validation de schéma.


Valider les fichiers de configuration connexes

css-loader n'est rarement le seul fichier de configuration d'un pipeline de build. Si vous utilisez PostCSS pour les transformations, le Validateur de Configuration PostCSS repère les erreurs d'ordre des plugins et les dépendances manquantes dans postcss.config.js. Si vous utilisez stylelint pour les contrôles qualité CSS, le Validateur de Configuration Stylelint valide votre .stylelintrc avant qu'il n'interfère avec le build. Le Validateur de Configuration ESLint est utile si votre chaîne de build exécute aussi ESLint - des erreurs de configuration peuvent y apparaître comme des erreurs de build ressemblant à des erreurs de loader.

Validateur de Configuration PostCSS

Validez postcss.config.js pour les erreurs d'ordre des plugins et d'options - détecte les problèmes de configuration qui accompagnent fréquemment les erreurs de schéma css-loader dans les setups Webpack complexes.

Open tool

css-loader avec PostCSS et CSS Modules

La plupart des setups Webpack en production utilisent css-loader aux côtés de PostCSS et CSS Modules. Chacun ajoute ses propres options et ses propres erreurs de schéma potentielles. Comprendre leurs interactions prévient les conflits de configuration les plus courants.

L'option importLoaders

Quand PostCSS s'exécute sur un fichier CSS avant css-loader, vous devez définir importLoaders: 1 (ou plus) dans les options de css-loader pour garantir que les déclarations @import du CSS passent aussi par PostCSS. Sans cela, les fichiers importés échappent à PostCSS. Une erreur courante est de mettre importLoaders: true - cela déclenche une erreur de validation de schéma car l'option doit être un nombre, pas un booléen. Réglez-la au nombre de loaders exécutés avant css-loader dans la chaîne.

CSS Modules avec noms de classes personnalisés

La personnalisation des noms de classes CSS Modules a été déplacée vers le sous-objet modules dans css-loader v4. Une configuration CSS Modules complète avec un motif d'identité personnalisé utilise mode, localIdentName et exportLocalsConvention - chacun comme option distincte avec ses propres contraintes de schéma. Passer l'un d'eux au premier niveau de options au lieu de dans modules produit une erreur de propriété inconnue.

Options url et import

Les options url et import de css-loader contrôlent si le loader résout les références url() et les déclarations @import. Toutes deux acceptent soit un booléen, soit un objet avec fonction de filtrage. Passer une fonction brute - plutôt qu'un objet avec une propriété filter - déclenche une erreur de schéma car le schéma de l'option attend un objet avec propriété filter, pas une fonction nue. Enveloppez toujours les fonctions de filtrage dans la forme d'objet attendue.

Warning

Si vous migrez de Webpack 4 vers Webpack 5, les options css-loader ne sont pas la seule chose qui a changé. Les loaders file-loader et url-loader qui géraient autrement les assets sont remplacés par les Asset Modules intégrés de Webpack 5. Conserver ces loaders aux côtés de la configuration Asset Modules de Webpack 5 crée des règles conflictuelles qui peuvent ressembler à des erreurs css-loader mais sont en réalité des conflits de gestion d'assets. Validez votre config complète avec le [Validateur de Configuration Webpack](/tools/data/validators/webpack-config-validator) pour séparer les problèmes css-loader des conflits d'Asset Modules.

Key takeaways

  • Les erreurs de validation de schéma css-loader se déclenchent avant la compilation et nomment toujours le chemin exact de l'option invalide - lisez d'abord le chemin, pas la pile d'appels.
  • La cause la plus fréquente est d'utiliser la syntaxe d'options css-loader v3 (localIdentName plat, minimize, camelCase) avec une installation v4+ ou v6+.
  • En css-loader v4+, toutes les options CSS Modules se déplacent dans un sous-objet modules - localIdentName devient modules.localIdentName.
  • minimize a été supprimée en v4 - utilisez css-minimizer-webpack-plugin dans optimization.minimizer à la place.
  • importLoaders doit être un nombre (ex. 1), pas un booléen - passer true déclenche une erreur de validation de type.
  • Utilisez le Validateur de Configuration Webpack pour détecter toutes les erreurs de schéma en une passe avant de rebuilder.
  • Vérifiez aussi les configs connexes - les erreurs de configuration PostCSS, ESLint et Stylelint accompagnent fréquemment les erreurs css-loader dans les pipelines complexes.

Questions fréquentes

A css-loader schema validation error is thrown when an option you passed in the css-loader options object does not match the JSON schema that css-loader uses to validate its configuration. This happens when you use a property name that does not exist in the current version of css-loader, pass the wrong value type for a known option, or use a configuration pattern from an older css-loader version that has since changed. Webpack validates loader options against their declared schemas before building, so the error appears immediately without any compilation.

Remove or rename the property named in the error message. The most common cause is using a deprecated option from an older css-loader version - for example, `localIdentName` at the top level of options, which moved to `modules.localIdentName` in css-loader v4+. Check the css-loader changelog for the version you are running and update your option structure accordingly. The error message always names the exact unknown property, so the fix is targeted.

css-loader introduced breaking option schema changes in several major versions. The most significant was v4, which moved all CSS Modules options under a dedicated `modules` object and dropped top-level options like `localIdentName`, `minimize`, and `camelCase`. If you upgraded from v3 to v4 or later, any of these flat options will now trigger a schema validation error. Migrate each option to the new nested structure and validate the result with the Webpack Config Validator tool.

This error means you passed a value of the correct type but outside the allowed set. For example, the `modules` option accepts a boolean, a string (`"local"`, `"global"`, `"pure"`), or a configuration object - passing any other string triggers this error. The error message lists the allowed values. Find the option, check what the current css-loader version accepts for that option, and update your config to use one of the listed valid values.

Yes. In Webpack 5 with css-loader v6+, enable CSS Modules by setting the `modules` option to an object: `{ mode: "local", localIdentName: "[name]__[local]--[hash:base64:5]" }`. The boolean shorthand `modules: true` still works for basic use, but any CSS Modules customisation requires the object form. A common source of schema errors is mixing the flat-option syntax from css-loader v3 with a v6 installation.

Yes. The Webpack Config Validator checks your entire webpack.config.js including the options objects passed to each loader in your module.rules array. It detects unknown properties, incorrect value types, and invalid option combinations for css-loader and other loaders. Paste your config and the validator reports issues with the same path notation (e.g. "module.rules[0].use[1].options.localIdentName") that Webpack itself uses in schema validation errors.

css-loader processes CSS files into JavaScript modules - it handles CSS parsing, CSS Modules, and url() resolution. style-loader injects the resulting CSS into the DOM at runtime. Schema validation errors naming css-loader in the message are caused by options in the css-loader options object. style-loader has its own smaller options schema and its errors are separate. Both loaders are validated independently by Webpack before the build starts.

Use mini-css-extract-plugin for production builds - it extracts CSS into separate files for better caching and performance. Use style-loader for development only - it injects styles at runtime which enables hot module replacement but is not suitable for production. A common Webpack pattern switches between the two based on the NODE_ENV value. Neither choice affects css-loader options or schema validation errors, which are independent of which output plugin you use.

ShareXLinkedIn