TIL n. 1 - NPM Overrides
TIL sta per Today I Learned, un'espressione inglese che significa letteralmente oggi ho imparato.
Uno scoglio importante nello sviluppo di librerie Angular è quello legato alla loro manutenzione. Tra le loro dipendenze sono solitamente presenti @angular/common e @angular/core, due librerie che fanno parte del nucleo di Angular, come suggerisce il nome.
Il problema è che quando in un'applicazione viene aggiornata la major version di Angular, se tutte le sue dipendenze non hanno fatto altrettanto è molto probabile scontrarsi con errori di questo tipo:
Package "nome-libreria" has an incompatible peer dependency to "@angular/common" (requires "^17.1.0" (extended), would install "19.1.4").
Il fatto è che, come in questo caso, dalla versione 17 alla versione 19 di Angular potrebbe non essere cambiato abbastanza da dover aggiornare la libreria. Insomma, bisognerebbe sempre tenere aggiornate le proprie librerie, soprattutto per questioni di sicurezza, ma magari non abbiamo tempo, e la libreria sarebbe comunque compatibile.
Introduco...
NPM Overrides
Aggiunto nella versione v8.3.0 di npm, del 9 dicembre 2021, overrides è un campo opzionale presente nel file package.json, che consente di specificare delle dipendenze per le dipendenze del nostro progetto, sovrascrivendone la versione.
L'errore riportato precedentemente, che normalmente avremmo risolto con un orribile --force, può essere invece superato in questo modo:
...
"overrides" {
"nome-libreria": {
"@angular/common": "^19.1.4",
"@angular/core": "^19.1.4",
}
}
Aggiungendo questi override nel file package.json possiamo liberarci di warning, errori e --force relativi a presunte incompatibilità tra le dipendenze.
Quali sono le conseguenze di questo approccio? Non lo so ancora, ma nel frattempo oggi ho imparato come evitare la scocciatura di dover forzare installazioni e aggiornamenti delle dipendenze dei miei progetti Angular, soprattutto se causate da librerie che ho sviluppato io, e che non ho tempo di aggiornare.