mirror of
https://github.com/MaksTinyWorkshop/_Assistant_Lead_Tech
synced 2026-04-06 21:41:42 +02:00
ajout patterns
This commit is contained in:
@@ -93,3 +93,48 @@ Deux processus ont réécrit le même fichier sans coordination, le second
|
||||
- éviter deux passes d’écriture concurrentes sur le même fichier
|
||||
- relire le diff immédiatement après toute passe automatique
|
||||
- privilégier une séquence stricte : édition, puis lint/format, puis vérification
|
||||
|
||||
---
|
||||
|
||||
## tsx + NestJS : injection par type cassée silencieusement
|
||||
|
||||
### Contexte
|
||||
|
||||
Projet `app-alexandrie`, Epic 3, le 10-03-2026.
|
||||
Le backend NestJS tournait avec `tsx watch` dans un contexte ESM (`module: nodenext`), notamment pour rester compatible avec Prisma v7.
|
||||
|
||||
### Symptômes
|
||||
|
||||
- `TypeError: Cannot read properties of undefined (reading 'get')` dans le constructeur d’un service
|
||||
- `ConfigService` injecté par type mais `undefined` au runtime
|
||||
- `@Injectable()` et `ConfigModule` correctement configurés, sans erreur de compilation
|
||||
|
||||
### Cause probable
|
||||
|
||||
`tsx` repose sur esbuild pour transpiler TypeScript.
|
||||
Dans ce contexte, `emitDecoratorMetadata` est ignoré même s’il est activé dans `tsconfig.json`.
|
||||
NestJS ne peut donc plus résoudre correctement certaines injections par type, notamment `constructor(private readonly config: ConfigService)`.
|
||||
|
||||
### Correctif / règle à retenir
|
||||
|
||||
- ne pas supposer que `emitDecoratorMetadata` fonctionne avec `tsx`
|
||||
- dans ce contexte, éviter l’injection par type de `ConfigService` pour les services d’infra
|
||||
- lire explicitement les variables via `process.env`, après chargement amont de `ConfigModule.forRoot()`
|
||||
|
||||
Exemple :
|
||||
|
||||
```typescript
|
||||
// AVANT
|
||||
constructor(private readonly config: ConfigService) {
|
||||
const host = this.config.get('REDIS_HOST');
|
||||
}
|
||||
|
||||
// APRES
|
||||
constructor() {
|
||||
const host = process.env['REDIS_HOST'] ?? 'localhost';
|
||||
}
|
||||
```
|
||||
|
||||
### Alternative écartée
|
||||
|
||||
`nest start --watch` a été testé mais a introduit des conflits ESM/CJS dans ce contexte (`exports is not defined`).
|
||||
|
||||
Reference in New Issue
Block a user