2012-07-12 10 views
15

Il check in node_module era lo standard della community, ma ora abbiamo anche un'opzione per usare shrinkwrap. Quest'ultimo ha più senso per me, ma c'è sempre la possibilità che qualcuno abbia "forzato la pubblicazione" e introdotto un bug. Ci sono ulteriori svantaggi?Check in node_modules vs. shrinkwrap

risposta

16

Il mio post preferito/filosofia su questo argomento va tutto il viaggio di ritorno (a lungo nel terreno node.js) al 2011:

https://web.archive.org/web/20150116024411/http://www.futurealoof.com/posts/nodemodules-in-git.html

Per citare direttamente:

Se avete un'applicazione, che distribuite, controllate tutte le vostre dipendenze su node_modules. Se si utilizza npm do deploy, solo definire bundleDependencies per quei moduli. Se hai delle dipendenze che devono essere compilate, dovresti comunque controllare il codice ed eseguire la ricostruzione di $ npm su deploy.

Tutti quelli che ho detto anche questo mi dice che sono un idiota e poi qualche settimana dopo mi dice che avevo ragione e controllo node_modules in a Git è stata una benedizione per l'implementazione e lo sviluppo. È obiettivamente migliore, ma ecco alcune delle domande/lamentele che mi sembra di avere.

Penso che questo sia ancora il miglior consiglio.

Lo scenario di pubblicazione forzata è raro e probabilmente lo npm shrinkwrap funzionerà per la maggior parte delle persone. Ma se stai distribuendo in un ambiente di produzione, niente ti dà la tranquillità come controllare l'intera directory node_modules.

In alternativa, se davvero, davvero non si desidera controllare nella directory node_modules, ma vuoi un migliore garanzia non c'è stata una spinta forzata, mi piacerebbe seguire il consiglio in npm help shrinkwrap:

Se si desidera evitare qualsiasi rischio che un autore bizantino sostituisca un pacchetto che si sta utilizzando con un codice che interrompe l'applicazione, è possibile modificare il file shrinkwrap per utilizzare i riferimenti URL git piuttosto che i numeri di versione in modo che npm recuperi sempre tutti i pacchetti da git.

Certo, qualcuno potrebbe eseguire uno strano git rebase o qualcosa e modificare un git commit hash ... ma ora siamo solo pazzo.

+1

Ad oggi tale collegamento è rotto (500 errore): ecco un [Archivio] (https://gist.github.com/3854887) (gist.github. it/3854887) di questo post. – Sukima

+0

@Sukima Credo che il link sia attivo e funzionante di nuovo. – Kostia

+1

Se gli autori rimuovono i loro pacchetti, cosa che accade, allora 'shrinkwrap' non sarà di aiuto. –

2

npm FAQ risponde direttamente questo:

  • check node_modules in git per le cose che distribuisce, come siti web e applicazioni .
  • Non controllare node_modules in git per le librerie ei moduli destinati a essere riutilizzati.
  • Utilizzare npm per gestire le dipendenze nell'ambiente dev, ma non negli script di distribuzione.

citato da npm FAQ

+3

Anche le domande frequenti possono cambiare. Ora si legge: "Per i pacchetti che distribuisci, come siti Web e app, dovresti usare npm shrinkwrap per bloccare l'albero delle dipendenze completo". – Johann