Circular Dependencies
JavaScript 🔴 SeniorDéfinition
Situation ou le module A importe B et B importe A. En CommonJS, on obtient un export partiel. En ESM, ca fonctionne grâce aux live bindings mais peut causer des bugs subtils.
Analogie
Deux personnes qui se tiennent la porte mutuellement : ca fonctionne si l'une passe en premier, mais ca peut devenir un blocage.
Exemple de code
// a.js
import { b } from './b.js';
export const a = 'A' + b;
// b.js
import { a } from './a.js';
export const b = 'B'; // a est undefined ici en CJS!
Cas d'usage
Détecter et casser les cycles avec des outils comme madge ou eslint-plugin-import.
Anti-pattern
Ignorer les circular dependencies : elles causent des undefined mystérieux et du code fragile.