node_modules: viaggio al centro dell'oggetto più denso dell'universo conosciuto



C'è una costante fisica che gli astronomi hanno trascurato per decenni: la massa di una stella collassata è nulla a confronto di una cartella `node_modules` generata per mostrare un testo lampeggiante su una pagina HTML.

Se programmi in JavaScript (o se hai mai provato a modificare un tema WordPress moderno pensando "massì, cosa ci vorrà mai"), conosci bene quel brivido lungo la schiena. Digiti tre innocue paroline nel terminale, premi Invio e, prima ancora che tu possa pentirtene, il ventilatore del tuo portatile decolla verso l'orbita geostazionaria.

Benvenuto nel meraviglioso, terrificante e ricorsivo mondo di npm.

Il rito di iniziazione: 'npm install' e il silenzio del sistema operativo



Tutto inizia sempre con le migliori intenzioni. Vuoi solo creare una to-do list minimalista. Crei il file `package.json`, inserisci una dipendenza per formattare una data e lanci:

```bash
npm install
```

In quel preciso istante, il client npm contatta i server sparsi per il globo terracqueo e decide che, per scrivere l'orario delle 14:35, hai bisogno dell'equivalente digitale della Biblioteca di Alessandria.

Iniziano a scorrere barre di caricamento con nomi esotici. La barra avanza per quattro minuti. Poi si ferma su `idealTree: sill resolveWithNewModule`. La ventola della CPU comincia a fischiare come un Boeing 747 che tenta un decollo d'emergenza da una pista di fango. Windows smette di rispondere; macOS ti mostra la simpatica girandola arcobaleno della morte; Linux, fedele alla sua natura cinica, ti killa direttamente il server grafico senza salutare.

Quando il processo termina, scopri che per calcolare due date hai appena scaricato 1.482 pacchetti, composti da 84.000 file singoli, per un peso totale di 870 Megabyte.

La matrioska quantistica: l'iconica saga di 'is-odd'



La domanda sorge spontanea anche al più sprovveduto dei nabbi: ma se ho chiesto solo una libreria, perché me ne ritrovo millequattrocento?

La risposta risiede nell'effetto matrioska dell'ecosistema JavaScript.

Supponiamo che lo sviluppatore A scriva una libreria per creare un pulsante blu. Per fare il pulsante blu, usa la libreria dello sviluppatore B che arrotonda gli angoli. Lo sviluppatore B usa la libreria dello sviluppatore C che controlla se un numero è pari. E qui arriviamo alla leggenda del codice moderno: pacchetti come `is-odd` (serve a controllare se un numero è dispari).

Ora, uno sviluppatore normale penserebbe:
```javascript
function isOdd(n) {
return n % 2 !== 0;
}
```
Una riga. Cinque caratteri matematici.

Invece no. Il pacchetto `is-odd` scarica `is-even`, il quale a sua volta scarica `is-number`, che probabilmente importa un parser di stringhe unicode, che a sua volta ha come dipendenza uno script per calcolare la traiettoria orbitale di Plutone. Moltiplica questo schema piramidale per ogni singola funzionalità del tuo frontend ed ecco che il tuo disco da 1 Terabyte implora pietà.

Cancellare la cartella: un'operazione da gestire con i pompieri



Il vero dramma si consuma quando decidi di fare pulizia. Guardi il tuo progetto abbandonato di tre anni fa, vedi la cartella `node_modules` e dici: "Dai, facciamo Shift + Canc e liberiamo spazio".

Povero illuso.

I file system moderni (in particolare NTFS su Windows) gestiscono malissimo centinaia di migliaia di micro-file annidati a profondità degne delle fosse delle Marianne. Clicchi "Elimina" e si apre una finestra di dialogo:

> "Preparazione all'eliminazione in corso... Individuati 412.000 elementi (Tempo rimanente stimato: 3 giorni e 14 ore)".

In quel lasso di tempo fai in tempo a prendere una seconda laurea, sposarti, ristrutturare la cucina e vedere tuo figlio diplomarsi. Molti sviluppatori hanno scoperto che fai prima a clonare l'intero hard disk su un altro drive, escludendo `node_modules`, formattare il disco originale e ricominciare da capo.

(Pro-tip da veterani disperati: usate tool come `rimraf` da terminale, o create una directory vuota e sincronizzatela con `robocopy /MIR` se siete su Windows. Vi risparmierà ore di fegato amaro).

Gli audit di sicurezza: il terrore rosso



Come se la pesantezza gravitazionale non bastasse, alla fine di ogni installazione npm ti saluta con un messaggio incoraggiante tipo:

> `found 47 vulnerabilities (12 moderate, 29 high, 6 critical)`

Ti senti subito Kevin Mitnick nel mirino dell'FBI. Tu volevi solo centrare una foto nel footer e ora hai sei vulnerabilità critiche che a quanto pare permetterebbero a un hacker bielorusso di prendere il controllo remoto del tuo microonde.

Lanci `npm audit fix` con la speranza nel cuore, e il comando puntualmente:
1. Non risolve nulla.
2. Aggiorna tre pacchetti a caso rompendo l'intero build.
3. Ti consiglia di lanciare `npm audit fix --force`, che è l'equivalente software di sparare alla scheda madre per debellare un virus.

La morale della favola



Oggi alternative più moderne e intelligenti come `pnpm` o `bun` cercano di salvarci la vita usando hard link e salvando i pacchetti in una sola cartella globale invece di duplicarli in ogni meandro della tua home directory. Ma la verità è che `node_modules` rimarrà per sempre il monumento supremo all'ingegneria del "funziona, non toccare niente".

La prossima volta che comprate un SSD da 2TB credendo che vi basterà per tutta la vita, ricordatevi: bastano tre progetti in React, due in Vue e un esperimento dimenticato con Angular per trasformarlo in un elegante fermacarte.