2014-12-09 23 views
19

Nel mio file package.json ho elencato una dependance come dipendenza. Dopo aver eseguito l'installazione di npm, bower viene installato localmente. Quando provo a correre pergolato dopo averlo installato localmente ottengo l'erroreInstallato localmente rispetto ai moduli NPM installati a livello globale

"bower" is not recognized as an internal or external command." 

Sembra che l'unico modo per risolvere questo è quello di installare gazebo a livello globale. Perché dovrei farlo? Se il mio progetto contiene una copia locale di Bower, perché non lo usa il nodo?

esegue Windows 7

risposta

25

L'installazione locale rende disponibile bower al progetto corrente (dove memorizza tutti i moduli nodo in node_modules). Questo è solitamente valido solo per l'utilizzo di un modulo come var module = require('module'); Non sarà disponibile come comando che la shell può risolvere fino a quando non lo si installa in tutto il mondo npm install -g module dove npm lo installerà in un punto in cui la variabile percorso risolverà questo comando .

Modifica:This documentation spiega in modo approfondito.

+3

Quale sarebbe il punto nell'usare localmente Bower come var bower = require ('bower'); ? – Rigil

+2

Bene, bower è un cattivo esempio poiché non penso che espongano un'api tramite javascript, ma '' 'express''' è qualcosa che ho usato in un progetto che ha un'interfaccia a linea di comando e una libreria si utilizza localmente nei file js. (Vedi la mia modifica per la documentazione utile) – Jimi

+2

È anche utile perché i comandi nel blocco 'scripts' in' package.json' risolvono automaticamente i comandi locali. Ciò significa che potresti avere uno script che dipendeva da bower senza avere una dipendenza non documentata su Bower. – loganfsmyth

1

solito di installare i moduli NPM a livello globale se si vuole che inclusi nel vostro percorso per essere eseguito dalla riga di comando. Poiché è installato localmente, dovrai eseguirlo dalla cartella node_modules.

+1

Come collegato nella risposta accettata, non è così semplice come installare tutto a livello globale e non il modo consigliato. – PhilT

13

È possibile eseguire l'istanza locale digitando riga sottostante in cmd:

node_modules/bower/bin/bower <bower args> 
+5

Oppure più corto: 'node_modules/.bin/bower' – alans

1

Usiamo sia PHP e JavaScript, quindi abbiamo compositore e NPM.

Ciascuno dei progetti su cui lavoriamo ha diversi pacchetti sia per il runtime del pacchetto che per gli strumenti di build/dev.

Poiché ci sono vincoli di versione in ogni progetto, l'installazione della versione x di un pacchetto globalmente (che verrebbe eseguita dalla riga di comando), ci causerebbe problemi, installeremo tutti gli strumenti in ogni pacchetto. Molto più facile da definire nei file appropriati composer.json/package.json.

Ma eseguire gli strumenti CLI è un problema se è necessario aggiungere costantemente un ulteriore percorso al comando.

A tal fine, abbiamo raccomandare alla squadra che i seguenti percorsi vengono aggiunti al $PATH nel .bashrc appropriata (o equivalente):

./vendor/bin:./node_modules/.bin

(EDIT: Per Windows, i percorsi sarebbe .\vendor\bin;.\node_modules\.bin;)

Quindi, mentre nel progetto X, abbiamo accesso agli strumenti CLI per quel progetto. Passa al progetto Y e otteniamo gli strumenti per i progetti.

Certo, si ottengono duplicazioni, ma ogni progetto è gestito da team diversi (e alcune persone sono in più team), quindi ancora una volta, avere 1 versione nella configurazione globale è un problema lì.

Problemi correlati