Quando hai questi conflitti, di solito accade quando installi package nuovi con `npm install` senza controllare cosa fa alla `package-lock.json`, giusto?
Il problema è che npm è un po' troppo flexible di default. Prima cosa, assicurati che tutti nel team usino `npm ci` al posto di `npm install` quando lavorano su un progetto già avviato. La differenza è che `npm ci` legge esattamente quello che c'è in `package-lock.json` senza modificarlo, mentre `install` si mette a fare gli upgrade di patch e minor version quando gli gira. Se usi `npm install` per aggiungere roba nuova e poi pushate il lock file, gli altri si ritrovano versioni diverse. Inoltre, committa sempre il `package-lock.json` nel repository - suona banale ma molti non lo fanno e poi si chiedono perché il build fallisce.
Per i nuovi package, usa `npm install --save-exact` se vuoi davvero freezare una versione specifica, oppure dai un'occhiata a tool tipo `npm audit` per controllare se ci sono dependency conflitti noti. Se il problema è molto grave con tante dipendenze annidate, considera anche di usare `npm dedupe` ogni tanto per pulire l'albero delle dipendenze. In realtà, potresti anche provare pnpm o yarn se sei disposto a cambiare ecosystem - gestiscono le dipendenze in maniera più ordinata - ma se vuoi restare con npm, rispettare il flusso `ci` + `package-lock.json` nel git dovrebbe risolvere la maggior parte dei casini.