Il 2021 JavaScript Full-Stack Bootcamp è ORA APERTO PER LE ISCRIZIONI!
Devi impegnare la cartella node_modules in Git?
Ho menzionato Git ma lo stesso vale per qualsiasi sistema di controllo della versione che ti capita di usare
È una buona domanda da fare. Ci sono pro e contro.
Io suggerisco di non fare il commit della cartella node_modules, e invece aggiungerla al tuo file .gitignore
.
Potresti avere esigenze speciali che invertono questa decisione.
Discuto l’argomento in modo che tu possa farti la tua opinione.
Ecco alcuni argomenti a favore del non fare il commit di node_modules
Tieni la tua storia Git pulita. Quando aggiungi un nuovo pacchetto, memorizzi i cambiamenti dei file package.json
e package-lock.json
.Quando decidi di aggiornare la versione del pacchetto, tutto ciò che memorizzi è il cambiamento del file package-lock.json
.
package-lock.json
è una caratteristica relativamente nuova di npm, che elimina il comando shrinkwrap usato in passato
Eviterai di dover mettere centinaia di MB di dipendenze nel tuo repository, e questo significa che nel tempo sarà più veloce lavorarci. Passare da un ramo all’altro e controllare il codice sono 2 operazioni enormemente influenzate dalla dimensione del repository.
Quando si lavora con i rami, si possono avere conflitti di fusione che si estendono oltre il proprio codice, e invece, coinvolgono il codice delle dipendenze. Questo non è bello da affrontare e potrebbe farvi perdere molto tempo. Evitare di mettere
Una richiesta di pull o merge se si cambiano le dipendenze, avrà molti più file coinvolti nel processo. Gli strumenti diventano più lenti o addirittura decidono di non mostrare la diff completa (GitHub, per esempio)
I moduli node nativi devono essere ricompilati se si distribuisce su una piattaforma diversa dalla macchina di sviluppo (caso d’uso comune: si sviluppa su Mac, si distribuisce su Linux). Devi chiamare npm rebuild
, che porta il server fuori sincronia.
Non impegnare node_modules implica che devi elencare tutti i tuoi moduli nel package.json
(e package-lock.json
) come passo obbligatorio. Questo è ottimo perché potresti non avere la diligenza di farlo, e alcune operazioni di npm potrebbero rompersi se non lo fai.
Tip: non c’è bisogno di usare la versione specifica nel tuo file
package.json
, non più dall’introduzione del filepackage-lock.json
.
Se usi insiemi dependencies
e devDependencies
separati, facendo il commit della cartella node_modules
stai fondamentalmente facendo il commit della devDependencies
e non c’è un modo (facile) per la build di produzione di liberarsene.
Ragioni che potrebbero portarti a fare il commit di node_modules, e come mitigarle
Un pacchetto npm
potrebbe essere rimosso dal suo autore dal registro di npm. È successo con il famoso incidente left-pad
nel 2016 (leggi). Questo è molto raro che accada per i pacchetti popolari. Se questo accade, potreste non avere più accesso a quel particolare pezzo di funzionalità.
Potreste anche sostenere che npm
non è garantito che rimanga in giro all’infinito, potrebbe scomparire, quindi un modo semplice per garantire di avere il codice completo della vostra applicazione in futuro è di fare il commit insieme alla vostra app.
Ogni volta che usate un pacchetto, create un fork su GitHub. Ogni tanto, tienilo aggiornato con l’origine (può essere automatizzato).
Questo non è sempre pratico perché i pacchetti possono avere decine di loro dipendenze.
Puoi usare un server repository privato per il tuo progetto, e usarlo per ospitare tutte le tue dipendenze.
Le opzioni includono
- sinopia
- npm_lazy
- npm-lazy-mirror
- artifactory
- npm Enterprise, dalla società npm
Un’altra ragione per impegnare le dipendenze è la possibilità di modificare rapidamente il codice, se si trova un bug o se si vuole aggiungere qualcosa a una libreria.
Questa è un’arma a doppio taglio: se lo si fa, si perde la possibilità di aggiornare il pacchetto se vengono fatte nuove versioni, ed è buono solo per correzioni veloci e temporanee.
La soluzione ottimale è quella di inviare un PR che faccia quello che vuoi al progetto originale o fare un fork e usare il tuo fork come dipendenza.
Scarica il mio manuale gratuito di Node.js
Il JavaScript Full-Stack Bootcamp 2021 è ora aperto per le iscrizioni fino a martedì prossimo! Non perdere questa opportunità, iscriviti OGGI!
Altri tutorial su node:
- Come usare promesse e await con le funzioni basate su callback di Node.js
- I moduli core di Node
- Parlano JSON con Node.js
- Lavorare con i descrittori di file in Node
- Flussi di Node.js
- Come ottenere la data dell’ultimo aggiornamento di un file usando Node.js
- La guida Pug
- Ecco la cartella corrente in Node
- Come usare il REPL di Node.js