Skip to content

Erreur de minification du CSS par lightningcss lors d'un build vite : @media zero hack #484

@leopold-gravier

Description

@leopold-gravier

Description

Bonjour,
Depuis la version 8 de vite, la feuille de style @codegouvfr/react-dsfr/main.css provoque une erreur lors d'un build. Elle ne peut pas être minifiée par lightningcss car elle contient un "hack @media zero", apparemment pour la compatibilité avec les anciens navigateurs.

Message d'erreur

[plugin vite:css-post]
SyntaxError: [lightningcss minify] Invalid media query.
This file contains @media zero hack (e.g. `@media (min-width: 0\0)`), which was used in the past to support old Internet Explorer versions. This is not a valid CSS syntax and will be ignored by modern browsers. 
While this is not supported by LightningCSS, you can set `css.lightningcss.errorRecovery: true` to strip these codes.
24623 |    }
24624 |  }
24625 |  @media screen and (min-width: 0\0) and (min-resolution: 72dpi) and (min-width: 0\0) and (min-resolution: 72dpi) {
      |                              ^
24626 |    .fr-enlarge-link,
24627 |    .fr-enlarge-button {

Étapes pour reproduire

Créer un nouveau projet avec npm, vite, React et typescript.

  1. Commencer un nouveau projet npm create vite@latest, choisir React puis typescript
  2. Aller dans le répertoire créé
  3. Installer les dépendances npm install

Installer react-dsfr d'après initial setup

  1. Installer react-dsfr npm install @codegouvfr/react-dsfr
  2. Ajouter les scripts 'predev' et 'prebuild' à package.json, puis lancer npm install.
"scripts": {
    "predev": "react-dsfr update-icons",
    "prebuild": "react-dsfr update-icons"
}
  1. Ajouter les icônes et la feuille CSS à index.html
<link rel="apple-touch-icon" href="./node_modules/@codegouvfr/react-dsfr/favicon/apple-touch-icon.png" />
<link rel="icon" href="./node_modules/@codegouvfr/react-dsfr/favicon/favicon.svg" type="image/svg+xml" />
<link rel="shortcut icon" href="./node_modules/@codegouvfr/react-dsfr/favicon/favicon.ico" type="image/x-icon" />
<link rel="manifest" href="./node_modules/@codegouvfr/react-dsfr/favicon/manifest.webmanifest" crossorigin="use-credentials" />

<link rel="stylesheet" href="./node_modules/@codegouvfr/react-dsfr/main.css" />
  1. Ajouter le DSFR à src/main.tsx
import { startReactDsfr } from "@codegouvfr/react-dsfr/spa";
startReactDsfr({ defaultColorScheme: "system" });

Impossible de faire un build

  1. npm run build
  2. Le build échoue avec le message d'erreur ci-dessus

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions