Quand tu as ces conflits, c'est généralement ce qui se passe quand tu installes de nouveaux packages avec `npm install` sans vérifier ce que ça fait au `package-lock.json`, non?
Le problème, c'est qu'npm est un peu trop flexible par défaut. D'abord, assure-toi que tout le monde dans l'équipe utilise `npm ci` à la place de `npm install` quand vous travaillez sur un projet déjà lancé. La différence, c'est que `npm ci` lit exactement ce qu'il y a dans `package-lock.json` sans le modifier, alors que `install` se met à faire des upgrades de patch et de version mineure quand ça lui plaît. Si tu utilises `npm install` pour ajouter des trucs nouveaux et que vous pushez le lock file, les autres se retrouvent avec des versions différentes. De plus, committe toujours le `package-lock.json` dans le repository - ça semble évident mais beaucoup ne le font pas et après se demandent pourquoi le build échoue.
Pour les nouveaux packages, utilise `npm install --save-exact` si tu veux vraiment figer une version spécifique, ou jette un œil à des outils comme `npm audit` pour vérifier s'il y a des conflits de dépendances connus. Si le problème est vraiment grave avec plein de dépendances imbriquées, pense aussi à utiliser `npm dedupe` de temps en temps pour nettoyer l'arbre des dépendances. En vrai, tu pourrais aussi essayer pnpm ou yarn si tu es prête à changer d'écosystème - ils gèrent les dépendances de façon plus ordonnée - mais si tu veux rester avec npm, respecter le flux `ci` + `package-lock.json` dans git devrait résoudre la plupart des problèmes.