2015-06-05 21 views
16

È possibile installare il pacchetto npm solo se non è già stato installato?È possibile installare il pacchetto npm solo se non è già stato installato?

ho bisogno di questo per accelerare la prova su CircleCI, ma quando ho eseguito npm install [email protected] ecc si scarica sempre le cose e li installa da scracth, tuttavia, la cartella node_modules con tutti i moduli è già presente al momento della esecuzione di comandi (cache da build precedente) e protractor --version ecc. mostra la versione necessaria del pacchetto.

La sua perfetta per avere un po 'di comando di una sola riga come questa:

protractor --version || npm install -g [email protected] 

ma quello che sarà anche verificare la versione del pacchetto.

+0

'[percorso -d/a/goniometro] || npm install ... '? – bishop

+3

'command -v protractor>/dev/null 2> & 1 || npm install ... '? – bishop

+0

Ho bisogno di verificare la versione del pacchetto attualmente installato, preferibilmente non scrivendo il percorso completo del pacchetto. più ambienti diversi, percorsi diversi ecc. – kovpack

risposta

17

con bash si può fare

[ $(node -p "require('protractor/package.json').version") != "2.1.0" ] && npm install [email protected] 
+0

Perfetto! Grazie! – kovpack

+4

Quasi perfetto, come si è appena scoperto. Genera un'eccezione se il pacchetto non è presente. – kovpack

7

versione Funzione del eccellente answer by @JeromeWAGNER:

function install_package_if_needed() { 
    local p=${1:-Package required} 
    local v=${2:-Version required} 
    shift 2 
    local i=$(node -p "require('$p/package.json').version" 2>/dev/null) 
    [ "$i" == "$v" ] || npm "[email protected]" install "[email protected]$v" 
} 

Usa come:

$ install_package_if_needed protractor 2.1.0 

Per passare le opzioni aggiuntive per npm, specificarli dopo la versione, in questo modo:

$ install_package_if_needed protractor 2.1.0 -g 
+0

Yeap, grazie. Ho fatto qualcosa di simile, ma ho chiamato più comandi di sistema da Ruby. Ma esattamente questa versione non è applicabile per il mio compito. – kovpack

+0

Grazie per questo. Ma era necessario rimuovere>/dev/null else $ sarò sempre vuoto. –

+0

@DarylTeo Grazie! Hai ragione. Non sono sicuro di cosa stavo pensando. Fisso! – bishop

0

Ho avuto lo stesso problema insieme a voler installare dipendenze globali da qualsiasi file "package.json" che li richiede.

Questo è per un ambiente di sviluppo Windows.

Here is my solution.

2
[ $(node -p "try{require('protractor/package.json').version}catch(e){}") != "2.1.0" ] && npm install grunt 
3

Si potrebbe provare npm list protractor || npm install [email protected]

Dove npm list protractor viene utilizzato per trovare protractor pacchetto.

Se il pacchetto non viene trovato, verrà restituito npm ERR! code 1 e fare npm install [email protected] per l'installazione

Problemi correlati