Biome
Biome ist der einzige Formatierer und Linter für JS, TS, JSX, JSON und CSS. SCSS ist die Ausnahme: Biome 2.5 parst es nicht, daher übernimmt stylelint .scss-Dateien (siehe scss-bem). Kein ESLint, kein Prettier.
Die biome.json im Root der Vorlage ist die Quelle der Wahrheit. Ein Plugin-Hook führt pnpm exec biome check --write <file> nach jeder von Claude bearbeiteten Datei aus, sofern eine biome.json im übergeordneten Verzeichnis existiert.
Regeln
-
Eine Root-
biome.json, Schema fest an die installierte Version gebunden.
"$schema": "https://biomejs.dev/schemas/2.5.15/schema.json"und@biomejs/biomeauf dieselbe Version im Workspace-Katalog festgelegt. Ein nicht passendes Schema versteckt unbekannte oder umbenannte Optionen im Editor. Führe beim Upgradepnpm exec biome migrate --writeaus und aktualisiere beides. -
Git entscheiden lassen, was ignoriert wird:
vcs.useIgnoreFile: true. Dann Build-Ausgaben mit!!infiles.includeserzwingend ignorieren (!!**/.next,!!**/.turbo,!!**/dist,!!**/coverage), was Biome auch davon abhält, diese Ordner zu durchsuchen. Ein einzelnes!schließt von der Verarbeitung aus, indiziert aber weiterhin.files.ignoreUnknown: trueverhindert, dass.scssund andere nicht unterstützte Dateien gemeldet werden. -
Formatierung: 2 Leerzeichen, Breite 100, LF, doppelte Anführungszeichen, Semikolons, nachfolgende Kommas. Diese sind für jedes Repository festgelegt, damit Diffs nicht über den Stil streiten. Füge keine paketspezifischen Formatierungs-Overrides hinzu.
-
Linter:
preset: "recommended",a11y: "error", Domänenreactundnextaufrecommended.
rules.recommended: trueist die alte Schreibweise und veraltet: Verwenderules.preset.a11yauferror, weil nuvui die Zugänglichkeit seiner eigenen Komponenten selbst regelt; was übrig bleibt (alt, Labels, Button-Typen in deinem eigenen Markup), muss korrekt sein. Dienext-Domäne fügt Regeln wienoImgElementhinzu;reactfügt Hooks-Regeln hinzu. -
Nursery bleibt ausgeschaltet. Nursery-Regeln ändern sich zwischen Patch-Releases und können bei einem Biome-Upgrade CI-Builds zum Scheitern bringen. Aktiviere eine nur gezielt, mit Namen, mit einem Kommentar, warum, und überprüfe sie bei jedem Upgrade erneut.
-
noConsolewarnt, erlaubt abererrorundwarn. Strukturierte Fehlerprotokolle (instrumentation.ts) verwendenconsole.error; vereinzelteconsole.log-Aufrufe werden erfasst. -
Importe mit der Assist-Funktion sortieren, nicht von Hand.
assist.actions.source.organizeImports: "on".biome check --writewendet es an;biome cischlägt bei unsortierten Importen fehl. -
Overrides per Glob, für Testdateien und ähnliches. Die Vorlage aktiviert die
test-Domäne nur für*.test.ts(x)/*.test-d.ts. Platziere dort auch andere Dateityp-Unterschiede, nicht in separaten Konfigurationen. -
Verschachtelte Konfigurationen nur für Pakete, die sich tatsächlich unterscheiden, und sie erweitern die Root.
// packages/legacy-widget/biome.json { "extends": "//", "linter": { "rules": { "style": { "noNonNullAssertion": "off" } } } }"extends": "//"bedeutet "die Root-Konfiguration" und impliziert"root": false. Jede andere verschachtelte Konfiguration muss"root": falsesetzen. Wir verwenden kein gemeinsames@repo/biome-config-Paket: Die Root-Datei plus//deckt alles ab, ohne Build oder Abhängigkeit. -
Lokal
biome check --write; in CIbiome ci.
pnpm lintführtbiome check .aus (keine Schreibvorgänge);pnpm lint:fixführtbiome check --write .aus. CI führtpnpm exec biome ci --reporter=github .aus, das niemals schreibt, bei Formatierungs-, Lint- und Importsortierungsfehlern fehlschlägt und den PR annotiert. Füge--changed --since=origin/mainnur hinzu, wenn der vollständige Durchlauf langsam wird; aktuell dauert es Millisekunden. -
Eine Zeile unterdrücken, mit Begründung.
// biome-ignore lint/suspicious/noExplicitAny: third-party callback typed as any upstreamDeaktiviere niemals eine Regel repositoryweit, um eine einzelne Datei durchzubekommen. Wenn eine Regel für das Repository falsch ist, ändere
biome.jsonin einem eigenen Commit mit der Begründung. -
Beheben, nicht unterdrücken, die häufigen.
useImportType: Führe die Korrektur aus; sie ist erforderlich durchverbatimModuleSyntax.noExplicitAny: Verwendeunknownund parse (siehetypescript-production).useButtonType,noSvgWithoutTitle,useAltText: Echte Barrierefreiheitsfehler.noImgElement: Verwendenext/image.useExhaustiveDependencies: Korrigiere die Abhängigkeitsliste oder verschiebe den Wert aus der Komponente heraus.
-
VS Code: Biome ist der Standard-Formatierer, Korrekturen beim Speichern. Die
.vscode/settings.jsonder Vorlage setzteditor.defaultFormatter: "biomejs.biome",source.fixAll.biomeundsource.organizeImports.biomebeim Speichern undbiome.requireConfiguration: true, damit die Erweiterung in Repos ohne Biome ruhig bleibt. SCSS behält die stylelint-Erweiterung. Empfehle beide in.vscode/extensions.json. -
Migration von ESLint/Prettier: migrieren, dann löschen.
Siehe references/migration.md. Endzustand: Keineeslint*-,prettier*- oder@typescript-eslint/*-Pakete, keine.eslintrc*-,eslint.config.*-,.prettierrc*-,.prettierignore-Dateien.
Was Biome nicht abdeckt
| Datei | Werkzeug |
|---|---|
.scss | stylelint (scss-bem) |
.yaml (Workflows, Helm) | actionlint für Workflows; helm lint + kubeconform für Charts |
.md | nichts wird erzwungen |
| Typfehler | tsc --noEmit (pnpm typecheck) |
Verifizieren
pnpm lint # biome check . && stylelint
pnpm exec biome ci --reporter=github . # Was CI ausführt
pnpm exec biome rage # Gibt die aufgelöste Konfiguration aus, falls etwas ignoriert erscheint
Quellen
- https://biomejs.dev/reference/configuration/
- https://biomejs.dev/guides/big-projects/
- https://biomejs.dev/linter/domains/
- https://biomejs.dev/linter/rules/
- https://biomejs.dev/reference/cli/
- https://biomejs.dev/reference/vscode/
- https://biomejs.dev/guides/migrate-eslint-prettier/
- https://biomejs.dev/internals/language-support/