2012-02-07 3 views
5

Sto per eseguire un progetto di grandi dimensioni con node.js e attualmente provo a ordinare alcune cose.Miglior flusso di lavoro utilizzando node.js npm e git

Nei progetti di nodi precedenti avevo una cartella aggiuntiva per tutti i moduli nodo che ho usato. Questa cartella è stato ignorato da git e sono riuscito versione e aggiornamenti via sottomoduli git, che non era facile

Quello che sto cercando è (dipendenze, l'aggiornamento alla nuova versione non è stato sempre divertente.):

npm install packagename
npm dump_modules_into_file

Così tutti gli altri che è coinvolto in questo progetto potrebbe fare:

npm install_or_update_modules_from_file

Non voglio avere lo node_modules monitorato dal mio repository git. Fondamentalmente voglio qualcosa di simile a come symonfy2 lo gestisce bundles.

P.S .: so di npm submodule packagename, ma questo comando non è molto utile perché non installa le dipendenze e non aggiorna i moduli.

P.S.2: Sono pronto per lo package.json, ma anche questo presenta alcuni difetti. (Nessun parametro e devi aggiornare le versioni del modulo a mano.)

+1

Cosa intendi "' package.json' non ha parametri? " –

+0

E.g .: Per installare mongodb con parser C++ nativo è necessario: 'npm install mongodb --mongodb: native'. Non ho capito come passare questa parte nativa a npm quando si utilizza un 'package.json'. – TheHippo

risposta

6

package.json completerà ciò che stai cercando. Nel commento relativo al passaggio del flag --mongodb:native, questo flag rappresenta un argomento per il comando npm e fa quando si utilizza uno package.json nel proprio progetto. Il pacchetto mongodb ha uno "script di installazione" che cerca quel flag nell'ambiente di elaborazione del nodo. Se questo flag è presente, genera un altro processo per la build. Quindi, se avete MongoDB come una dipendenza nella vostra package.json

{ 
    "name": "MyProject" 
    , "description": "Test" 
    , "version": "0.0.1" 
    , "dependencies": { 
     "mongodb": "*" 
    } 
} 

Esecuzione npm install --mongodb:nativevolontà lavoro.

Riguardo a "aggiornarlo a mano" - è davvero solo la prima volta che potrebbe richiedere del tempo, e sono sicuro che potresti scrivere uno script per generarlo se ci sono molte dipendenze. Tuttavia, sembra che tu abbia una squadra abbastanza grande, e se questo è il caso, automatizzare gli aggiornamenti su package.json diventerà davvero brutto (pensa ai nuovi sviluppatori, alle funzionalità sperimentali, ecc.) Avere responsabilità per le build rotte in questa parte del ciclo di sviluppo non è necessariamente una cattiva idea.

Riferimenti:

EDIT: e come Nick detto, aggiungendo la directory 'node_modules' a .gitignore impedirà qualsiasi di quei file da essere controllati nel repository

+0

Grazie per il suggerimento con i parametri passati a npm in generale! Includerò il comando npm in uno script bash o in un Makefile e siamo a posto ... – TheHippo

+0

http://npmjs.org/doc/shrinkwrap.html potrebbe aver aiutato .... – TheHippo

2

Afaik, gli unici modi per eseguire la gestione dei pacchetti sono quelli che hai descritto anche se non sono sicuro di cosa non sei interessato a wrt package.json .

Se si desidera un controllo stretto sulle versioni dei moduli che si utilizzano è possibile specificare in modo esplicito il numero di versione. È inoltre possibile utilizzare l'approccio >=X.X.X per acquisire automaticamente l'ultimo (oltre una soglia), che a volte può essere utilizzato a fini di sviluppo.

Questo permette ai compagni di squadra da fare:

npm install . 

che installerà tutte le dipendenze elencati all'interno del file package.json. Questi verranno installati su ./node_modules ma è possibile effettuare il .gitignore come indicato.

6

È un buon articolo che spiega quando dovresti e non dovresti controllare i tuoi node_modules in git. Può rispondere alle tue domande.

node_modules in git

+1

Preferisco http: // npmjs .org/doc/shrinkwrap.html –

+0

Vale la pena leggere sia l'articolo dato che il collegamento su node-shrinkwrap –

0

Per testare completamente la configurazione del pacchetto e garantire che i moduli si comportano come essi sulla distribuzione finale ora utilizzare la seguente procedura. Evita completamente la necessità di hackerare le directory node_module o il codice require() così quando lo si distribuisce, funziona solo con.

Per progetti interni o pre-release su github, è inoltre possibile impostare "private": true nel proprio package.json in modo che npm rifiuti di pubblicarlo.

  1. Creare una directory di progetto sotto il controllo di versione Git e aggiungere tutti i moduli nodo come sottodirectory. I nomi delle sottodirectory devono corrispondere ai nomi dei pacchetti. Se stai lavorando con github, ti consigliamo di creare un repository git separato per ogni directory del modulo. Possono essere git submodules nel repository del progetto. Aggiungi node_module ai tuoi file .gitignore.

  2. Installare uno strumento come npm-server ed eseguirlo nella directory del progetto. Quindi imposta il registro di npm su localhost, quindi ora npm parlerà con il tuo server npm locale per recuperare i pacchetti. Qualsiasi esso trova come sottodirectory che invierà. Qualunque cosa non trovi sarà proxy per registry.npmjs.org. $ npm set registry http://localhost:6070/ $ cd ~/projects $ npm-server

  3. avviare una nuova shell e creare una directory sandbox separata $ mkdir sandbox $ cd sandbox

  4. Installare il prodotto utilizzando un server del registro locale. Cancella la cache locale dei npm e reinstalla la tua app. Lo faccio su una riga, quindi è facile rifare la shell. Potresti volerlo scrivere.

    $ npm cache clear; sleep 3; npm uninstall -g app; sleep 3; npm install -g app

  5. prova la vostra applicazione:

    $ app ....

  6. Deregister registro NPM locale quando hai finito l'installazione:

    $ npm set registry http://registry.npmjs.org:80/

  7. Una volta completata test che puoi pubblicare ish la tua app e ripete nuovamente la distribuzione con npm-server fermato.

$ cd ~/projects $ npm publish app


Invece di registrare & annullare la registrazione del sever, si può semplicemente utilizzare il server localhost per un una tantum di installazione: $ npm --registry=http://localhost:6070/ install app


Sono in processo di scrittura di una versione biforcuta di npm-server quindi basta fare: $ npmsvr on // Registers local registry server $ npmsvr start // Start local registry server $ npmsvr off // Deregisters local registry server

+0

Ho appena pubblicato 'npmsvr' sul registro di npm per semplificare questa operazione. https://www.npmjs.org/package/npmsvr –

+0

Si noti che questa versione è solo un piccolo front-end per 'npm' e' npm-server', quindi è ancora necessario installare 'npm-server' –