2014-12-09 17 views
19

In meiner package.json-Datei habe ich Bower als Dependance aufgeführt. Nachdem ich npm install ausgeführt habe, wird Bower lokal installiert. Wenn ich versuche, Bower auszuführen, nachdem es am Ort der Installation erhalte ich FehlerLokal installierte versus global installierte NPM-Module

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

es den einzigen Weg scheint global Bower zu lösen ist dies zu installieren. Warum sollte ich das tun müssen? Wenn mein Projekt eine lokale Kopie von Bower enthält, warum wird der Knoten es nicht benutzen?

mit Windows 7

Antwort

25

Durch die lokale Installation wird das aktuelle Projekt verfügbar (in dem alle Knotenmodule in node_modules gespeichert werden). Dies ist normalerweise nur gut für die Verwendung eines Moduls wie var module = require('module'); Es ist nicht verfügbar als Befehl, dass die Shell auflösen kann, bis Sie es global installieren npm install -g module wo npm wird es an einer Stelle installieren, wo Ihre Pfadvariable diesen Befehl auflösen wird.

Edit:This documentation erklärt es ziemlich thorougly.

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

Was wäre der Punkt bei der lokalen Verwendung von Laube wie Var Bower = erfordern ('Bower'); ? – Rigil

+2

Nun, Bower ist ein schlechtes Beispiel, da ich glaube nicht, dass sie eine API durch Javascript offenbaren, aber '' express''' ist etwas, das ich in einem Projekt verwendet habe, das eine Befehlszeilenschnittstelle sowie eine Bibliothek hat Sie verwenden lokal in Ihren js-Dateien. (Siehe meine Bearbeitung für hilfreiche Dokumentation) – Jimi

+2

Es ist auch nützlich, weil Befehle im 'scripts' Block in' package.json' lokale Befehle automatisch auflösen. Das bedeutet, dass Sie ein Skript haben könnten, das von der Laube abhängt, ohne eine undokumentierte Abhängigkeit von der Laube zu haben. – loganfsmyth

1

Normalerweise installieren Sie NPM-Module global, wenn Sie sie in Ihrem Pfad enthalten wollen von der Kommandozeile lief werden. Da es lokal installiert ist, müssen Sie es aus dem Ordner node_modules ausführen.

+1

Wie in der akzeptierten Antwort verknüpft, ist es nicht so einfach wie die Installation global und nicht die empfohlene Methode. – PhilT

13

Sie können Ihre lokale Instanz, indem Sie die folgende Zeile in cmd ausführen.

Jedes der Projekte, an denen wir arbeiten, hat unterschiedliche Pakete sowohl für die Laufzeit des Pakets als auch für Build/Dev-Tools.

Da es in jedem Projekt Versionsbeschränkungen gibt, würde die globale Installation von Version x eines Pakets (das über die Befehlszeile ausgeführt würde) zu Problemen führen. Wir installieren alle Tools in jedem Paket. Viel einfacher in den entsprechenden composer.json/package.json Dateien zu definieren.

Das Ausführen der CLI-Tools ist jedoch ein Problem, wenn Sie dem Befehl ständig einen zusätzlichen Pfad hinzufügen müssen.

Zu diesem Zweck haben wir für das Team empfehlen, dass die folgenden Pfade zu Ihrem $PATH in der entsprechenden .bashrc hinzugefügt werden (oder gleichwertig):

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

(EDIT: Für Windows, die Pfade wäre .\vendor\bin;.\node_modules\.bin;)

So, während in Projekt X, haben wir Zugriff auf die CLI-Tools für dieses Projekt. Wechseln Sie zu Projekt Y, und wir bekommen diese Projektwerkzeuge.

Sicher, du wirst Duplikate bekommen, aber jedes Projekt wird von verschiedenen Teams gepflegt (und einige Leute sind in mehreren Teams), also ist es wieder ein Problem, eine Version im globalen Setup zu haben.

+5

Oder kürzer: 'node_modules/.bin/bower' – alans

1

Wir verwenden sowohl PHP und JavaScript, so haben wir Komponist und npm:

Verwandte Themen