Aller au contenu
useffect.sh
Planifier 30 min avec un senior
Architecture

Codegen

L’outil de build de React Native qui génère le code natif de liaison (C++, Java, Objective-C++) à partir de specs TypeScript ou Flow.

Définition

Codegen est l’outil de React Native qui génère, au moment du build, le code natif répétitif nécessaire aux Turbo Modules et aux Fabric Native Components. Il parcourt le projet à partir du dossier indiqué dans la clé codegenConfig du package.json, lit les fichiers de spec écrits en TypeScript ou en Flow, et produit du C++ commun, puis du Java pour Android et de l’Objective-C++ pour iOS. Ce code généré sert d’interface typée : le natif doit s’y conformer, sinon le build échoue. Codegen remplace l’écriture à la main des signatures de modules et des descripteurs de props qu’exigeait l’ancienne architecture, où rien ne vérifiait que JavaScript et natif parlaient le même langage. Il est invoqué automatiquement à chaque build Android et au pod install sur iOS, mais vous pouvez aussi le lancer à la main, via la tâche Gradle ou la CLI Codegen, pour inspecter les fichiers produits pendant le développement d’un module.

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.

Nos offres sur ce sujet

Sources

Les 35 termes du glossaire

Un de ces sujets bloque votre app ?

30 minutes avec un senior pour regarder le problème dans votre code. Gratuit.