Dans une vraie app
Dans un projet, Codegen se configure dans package.json sous codegenConfig : un name, un type (modules, components ou all), un jsSrcsDir et des options par plateforme comme javaPackageName ou modulesProvider. Une app peut aussi déclarer sa propre config pour ses modules locaux. Les fichiers générés atterrissent sous ios/build/generated/ios et android/app/build/generated/source/codegen ; ils ne se committent pas, et un .gitignore qui les laisse passer est un signal d’alerte.
Les erreurs fréquentes sont des erreurs de parsing de spec, pas de logique. Codegen n’accepte qu’un sous-ensemble de TypeScript : pas d’union de types arbitraires, pas de génériques, des Promise<T> avec un T sérialisable. Un import type qui pointe vers un fichier hors du jsSrcsDir passe en lint mais échoue au build natif, souvent avec un message pointant un fichier généré que personne n’a écrit. Quand un pod install casse sur une librairie tierce après un upgrade, c’est souvent la spec de cette librairie qui n’est plus compatible avec la version de Codegen embarquée.
Pour déboguer, npx react-native codegen (ou la tâche Gradle generateCodegenArtifactsFromSchema) permet de régénérer sans builder l’app entière. Nitro Modules a son propre générateur, Nitrogen, qui suit la même idée mais lit des interfaces TypeScript plus riches.
Termes liés
Turbo Modules
Les modules natifs de la New Architecture : une spec TypeScript, du code généré par Codegen, et un chargement à la demande via JSI.
Fabric
Le renderer de la New Architecture : un cœur C++ partagé entre iOS et Android qui calcule le layout de façon synchrone.
New Architecture
La réécriture du cœur de React Native (Fabric, Turbo Modules, JSI), activée par défaut depuis la 0.76 et seule architecture depuis la 0.82.
Nitro Modules
Le framework de Margelo pour écrire des modules natifs en Swift, Kotlin ou C++ exposés à JavaScript via JSI, avec des bindings générés depuis TypeScript.