Aller au contenu

Tooling

Disponible en anglais

Ce guide définit l’orientation de l’outillage JavaScript/TypeScript pour les projets Fenod. L’objectif est un retour rapide, une configuration minimale et un chemin cohérent que les agents peuvent suivre.

Pipeline outillage VoidZero

CoucheDéfautNotes
RuntimeNode 24Base pour les commandes applicatives et CI
Gestionnaire de paquetspnpmDéfaut pour les workspaces et scripts
Base dev/buildViteVia TanStack Start, Astro ou des apps Vite directes
Lanceur de testsVitestTests unitaires/intégration avec config compatible Vite
Tests navigateurPlaywrightParcours utilisateur, régressions, captures si nécessaire
Lint/formatUltracite + Oxlint/OxfmtPréférer une commande repo unique aux stacks ESLint/Prettier sur mesure
Vérification de typestsgoVérification TypeScript rapide quand elle est prise en charge
Builds de paquetstsdownDéfaut pour les bibliothèques/paquets internes
Orchestration monorepoTurborepoSeulement quand la forme du repo l’exige

L’outillage VoidZero fait maintenant partie de la strategie plateforme Cloudflare apres l’acquisition de VoidZero par Cloudflare en juin 2026. Cela valide le default Fenod runtime Cloudflare-first plus tooling Vite/Vitest/Oxc/Rolldown, mais cree aussi un risque de concentration assume: la stack s’appuie fortement sur un meme ecosysteme vendor.

  • Vite 8 comme base dev/build pour les nouveaux projets
  • Vitest pour les tests
  • Oxlint/Oxfmt comme bases rapides de lint/format
  • Rolldown comme bundler default de Vite 8
  • tsdown pour les builds de paquets/bibliothèques
  • Vite+ comme point d’entrée unifié expérimental pour les prototypes

Posture d’adoption :

OutilÀ utiliser maintenantÀ essayer quandÀ éviter quand
Vite 8oui pour les nouveaux projetsdefaultune app Vite 7 existante a besoin d’une migration en deux etapes moins risquee
rolldown-vitepont de migrationune app Vite 7 veut isoler les problemes bundler avant Vite 8nouveaux projets; utiliser Vite 8 directement
Vitestouipar défautun comportement purement navigateur est requis ; utiliser Playwright
Ultraciteouigate lint/format par défautle repo a un standard existant fort à préserver
tsdownoui pour les paquetsremplacement de configs tsup/Rolluples builds d’app sont gérés par le framework
Vite+expérimentalprototypes et tests internesbaseline client de production avant stabilité suffisante

tsgo est la toolchain native TypeScript 7 / Corsa et le chemin rapide pour les scripts de type-check et les gates CI. Il ne remplace pas complètement la toolchain TypeScript JavaScript / Strada pour tous les usages.

Garder typescript installé side-by-side pour les outils qui consomment l’API programmatique TypeScript: codemods, intégrations éditeur, checkers framework, et certains plugins lint. Supprimer typescript parce que tsgo est présent n’est pas un cleanup tant que l’API Corsa n’est pas stabilisée et que les outils concernés n’ont pas migré.

Posture actuelle: garder typescript pour les consommateurs d’API et utiliser tsgo/native preview seulement via des scripts explicites comme pnpm typecheck.

Pour les paquets internes :

  • sortie ESM-first
  • exports typés
  • map exports explicite
  • pas de Rollup personnalisé sauf besoin concret de plugin
  • smoke-test des imports de paquet avant publication/release

Exemple de scripts de paquet :

{
"scripts": {
"build": "tsdown",
"typecheck": "tsgo --noEmit",
"test": "vitest run"
}
}

Les agents et humains doivent exécuter d’abord le plus petit gate utile, puis monter quand le risque augmente.

Fenêtre de terminal
pnpm lint
pnpm typecheck
pnpm test
pnpm build

Pour les changements UI :

Fenêtre de terminal
pnpm test:e2e

Pour les changements fortement React, inclure React Doctor quand il est configuré :

Fenêtre de terminal
pnpm doctor:react:diff
  • Préférer les scripts du repo aux commandes ad hoc.
  • Ne pas ajouter de nouveaux outils lint/format/test sans supprimer ou intégrer l’ancien chemin.
  • Ne pas changer de gestionnaire de paquets.
  • Ne pas rendre Bun/Deno requis pour les commandes normales de l’app sauf si le projet les choisit explicitement.
  • Ne pas supprimer le package typescript quand tsgo est présent; garder les deux side-by-side jusqu’à stabilisation de l’API Corsa et migration confirmée des outils dépendants.
  • Si un build de paquet nécessite une config personnalisée, expliquer la limitation concrète que tsdown ne peut pas couvrir.