2011-09-29 15 views
9

Ho incontrato questo scenario diverse volte e non ho ancora trovato la risposta. Sto iniziando un nuovo progetto Node.js e questo progetto dipenderà da alcune altre librerie. Per ragioni, diciamo che alcune sono librerie JS puramente che possono essere aggiunte come sottomodelli git nel nuovo progetto, ma alcune hanno parti che richiedono uno sforzo extra (come le dipendenze di sistema che installano npm o librerie C che devono essere compilate).Come posso gestire le dipendenze di Node.js in un progetto su git con NPM?

Qual è il modo migliore per iniziare questo progetto e aggiungerlo a git, con le seguenti due requisiti:

  • librerie di altre persone non sono impegnati a nostra repo, e che sono invece sottomoduli o sono tirati in dinamicamente e installato da npm.
  • Non è necessario avere una lunga lista di istruzioni che devono essere seguite solo per clonare il repository e avere un ambiente di lavoro. Eseguire l'aggiornamento dei sottomodelli git --init --recursive va bene, eseguire un comando npm per leggere package.json e installare le dipendenze va bene (esiste un comando simile?), Ma forzare tutti a eseguire "npm install _ _ "di ogni singola dipendenza non è ok, e preferirei non usare 'make' o 'formica' per farlo se non dovessi farlo.

Qualche idea del modo migliore per farlo? Sembra una cosa così semplice, di base, ma non ho trovato un singolo esempio di ciò che sto cercando di fare.

Edit: Grammatica

+0

A proposito, puoi usare 'git clone --recursive ... foo' che è lo stesso di' git clone ...foo && cd foo && aggiornamento submodule git --init --recursive' – Pauan

risposta

10

modifica Ignora sotto, ma ha lasciato per riferimento. A volte non credo che chiaramente al mattino :)

creare un file package.json, aggiungo le dipendenze e la vostra installare semplicemente diventa:

npm install 

dalla directory del progetto. git ignore tutti i progetti aggiunti.


npm submodule foo 

Si installa i pacchetti in node_modules via git submodule così GitHub, ecc riconoscerà che sono di collegamento. Funziona quando il pacchetto npm ha un URI git incluso. Purtroppo un buon numero no, quindi sei sfortunato su quelli.

Inoltre, notare che quando si esegue questa operazione, npm non funzionerà più sul modulo, ad es. non è possibile aggiornare tramite npm, dovete farlo via git


Oppure si potrebbe fare qualcosa di simile:

./modules.js

modules.exports = [ '[email protected]', '[email protected]', '[email protected]' ]; 

./make

#!/usr/bin/env node 
var modules = require('./modules') 
    , spawn = require('child_process').spawn; 

for(var i=0, l=modules.length; i<l; i++){ 
    spawn('npm', [ 'install', modules[i] ]); 
} 
+0

Sheezus - sembra così sciocco che non sapevo di 'npm install' senza argomenti! Questo è esattamente ciò di cui avevo bisogno ... anche se la tua soluzione personalizzata è piuttosto liscia! Grazie per l'aiuto :). –

+0

Grazie per non aver rimosso il tuo anwser originale, era proprio quello di cui avevo bisogno. :) – mik01aj

Problemi correlati