Aller au contenu

Utiliser Biome dans de gros projets

Biome peut fournir quelques outils qui peuvent vous aider à l’utiliser correctement dans de gros projets, comme un monorepo ou des espaces de travail qui contiennent plusieurs projets.

Utiliser plusieurs fichiers de configuration

Section titled Utiliser plusieurs fichiers de configuration

Quand vous utilisez les fonctionnalités de Biome — soit en ligne de commande soit avec LSP — l’outil cherche le fichier de configuration le plus proche en utilisant le répertoire de travail actuel.

Si Biome n’y trouve pas le fichier de configuration, il se met à remonter la hiérarchie des répertoires du système de fichiers jusqu’à ce qu’il en trouve un.

Vous pouvez tirer profit de cette fonctionnalité pour faire appliquer différents paramètres sur la base du projet/dossier.

Supposons que nous avons un projet qui contient une appli backend et une nouvelle appli frontend.

  • Répertoireapp
    • Répertoirebackend
      • biome.json
      • package.json
    • Répertoirefrontend
      • biome.json
      • Répertoirelegacy-app
        • package.json
      • Répertoirenew-app
        • package.json

Ce qui veut dire que, quand vous exécutez un script du fichier app/backend/package.json, Biome utilisera le fichier de configuration app/backend/biome.json.

Quand vous exécutez un script de app/frontend/legacy-app/package.json ou app/frontend/new-app/package.json, Biome utilisera le fichier de configuration app/frontend/biome.json.

Il est possible d’utiliser l’option de configuration extends pour répartir les options entre les fichiers.

Partons du principe que nous avons ces prérequis :

  • legacy-app doit être formatée avec des espaces,
  • backend et new-app doivent être formatées avec des tabulations,
  • toutes les applis doivent être formatées avec des lignes de 120 caractères,
  • l’appli backend a besoin d’options de linting supplémentaires.

Nous commençons par créer un nouveau fichier de configuration dans app/biome.json et y plaçons les options partagées :

app/biome.json
{
"formatter": {
"enabled": true,
"lineWidth": 120
}
}

Maintenant, déplaçons app/frontend/biome.json vers app/frontend/legacy-app/ parce que c’est là que nous avons besoin d’utiliser un formatage différent.

app/frontend/legacy-app/biome.json
{
"formatter": {
"indentStyle": "space"
}
}

Puis, nous demandons à Biome d’hériter de toutes les options du fichier principal app/biome.json, en utilisant la propriété extends :

app/frontend/legacy-app/biome.json
{
"extends": ["../../biome.json"],
"formatter": {
"indentStyle": "space"
}
}

Passons à app/backend/biome.json, où nous avons besoin d’activer le linting :

app/backend/biome.json
{
"extends": ["../biome.json"],
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
}
}

Les monorepos sont des dépôts particuliers où plusieurs libraries sont stockées et maintenues dans un seul gros dépôt. Chaque librairie représente un projet indépendant, qui peut contenir différentes configurations.

Biome ne prend pas très bien en charge les monorepos en raison de certaines limites dans la résolution des fichiers de configuration imbriqués. Vous pouvez aider en suivant le ticket correspondant.

Pour une meilleure expérience développeur malgré les limites actuelles, il est conseillé d’avoir un biome.json à la racine du monorepo et d’utiliser la configuration overrides pour changer le comportement de Biome dans certains paquets.

Dans l’exemple suivant, nous désactivons la règle suspicious/noConsoleLog dans le paquet packages/logger.

biome.jsonc
{
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
},
"overrides": [{
"include": ["packages/logger/**"],
"linter": {
"rules": {
"suspicious": {
"noConsoleLog": "off"
}
}
}
}]
}