web-dev-qa-db-de.com

Lokal installierte versus global installierte NPM-Module

In meiner package.json - Datei ist Bower als Abhängigkeit aufgeführt. Nachdem ich npm install Ausgeführt habe, wird bower lokal installiert. Wenn ich versuche, Bower nach der lokalen Installation auszuführen, erhalte ich eine Fehlermeldung

"bower" wird nicht als interner oder externer Befehl erkannt

Es scheint die einzige Möglichkeit zu sein, dies zu beheben, indem Sie Bower global installieren. Warum sollte ich das tun müssen? Wenn mein Projekt eine lokale Kopie von bower enthält, warum wird es von Node nicht verwendet?

30
Rigil

Durch die lokale Installation wird Bower für das aktuelle Projekt verfügbar (wobei alle Knotenmodule in node_modules Gespeichert werden). Dies eignet sich normalerweise nur für die Verwendung eines Moduls wie var module = require('module');. Es ist nicht als - Befehl verfügbar, den die Shell erst auflösen kann Sie installieren es global npm install -g module, wobei npm es an einem Ort installiert, an dem Ihre Pfadvariable diesen Befehl auflöst .

Edit: Diese Dokumentation erklärt es ziemlich gründlich.

35
Jimi

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

node_modules/bower/bin/bower <bower args>
19
Selameab

Normalerweise installieren Sie NPM-Module global, wenn Sie möchten, dass sie in Ihrem Pfad über die Befehlszeile ausgeführt werden. Da es lokal installiert ist, müssen Sie es vom node_modules Mappe.

2
Joseph Dailey

Wir verwenden sowohl PHP als auch JavaScript, daher haben wir composer und npm.

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

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

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

Zu diesem Zweck empfehlen wir dem Team, die folgenden Pfade zu Ihrem $PATH im entsprechenden .bashrc (oder gleichwertig):

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

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

Während wir uns in Projekt X befinden, haben wir Zugriff auf die CLI-Tools für dieses Projekt. Wechseln Sie zu Projekt Y, und wir erhalten die Tools für das Projekt.

Sicher, es kommt zu Duplikaten, aber jedes Projekt wird von verschiedenen Teams verwaltet (und einige sind in mehreren Teams). Daher ist es auch hier ein Problem, eine Version im globalen Setup zu haben.

2