web-dev-qa-db-de.com

Warum müssen wir gulp global und lokal installieren?

2 Handbücher über gulp sagen, dass ich gulp zuerst global (mit -g flag) und dann noch einmal lokal installieren muss. Warum brauche ich das?

284
Stepan Suvorov

Wenn Sie ein Tool global installieren, kann es von einem Benutzer überall als Befehlszeilenprogramm verwendet werden, auch außerhalb von Knotenprojekten. Globale Installationen für ein Knotenprojekt sind fehlerhaft , da sie die Bereitstellung erschweren.

npm 5.2+

Das Dienstprogramm npx , das mit npm5.2 löst dieses Problem. Damit können Sie lokal installierte Dienstprogramme wie global installierte Dienstprogramme aufrufen (aber Sie müssen den Befehl mit npx beginnen). Wenn Sie beispielsweise ein lokal installiertes eslint aufrufen möchten, haben Sie folgende Möglichkeiten:

npx eslint .

npm <5.2

Bei Verwendung in einem script -Feld Ihrer package.json sucht npm nach node_modules für das Tool sowie global installierte Module, daher ist die lokale Installation ausreichend.

Also, wenn Sie zufrieden sind (in Ihrer package.json):

"devDependencies": {
    "gulp": "3.5.2"
}
"scripts": {
    "test": "gulp test"
}

usw. und läuft mit npm run test dann sollten Sie die globale Installation überhaupt nicht benötigen.

Beide Methoden sind nützlich, um Benutzer für Ihr Projekt einzurichten, da Sudo nicht benötigt wird. Dies bedeutet auch, dass gulp aktualisiert wird, wenn die Version in package.json gestoßen wird, sodass jeder die gleiche Version von gulp verwendet, wenn er mit Ihrem Projekt entwickelt.

Nachtrag:

Es scheint, dass Schluck bei globaler Verwendung ein ungewöhnliches Verhalten aufweist. Bei Verwendung als globale Installation sucht gulp nach einem lokal installierten gulp, an den die Steuerung übergeben werden soll. Für eine globale Installation von gulp ist daher eine lokale Installation von gulp erforderlich. Die obige Antwort bleibt jedoch bestehen. Lokale Installationen sind globalen Installationen immer vorzuziehen.

231
qubyte

TLDR; Hier ist warum :

Der Grund dafür ist, dass gulp versucht, Ihr gulpfile.js Verwenden Sie Ihre lokal installierte Version von gulp, siehe hier . Daher der Grund für eine globale und lokale Installation von gulp.

Wenn Sie gulp lokal installieren, befindet sich das Skript nicht in Ihrem PATH. Sie können also nicht einfach gulp eingeben und erwarten, dass die Shell den Befehl findet. Durch die globale Installation gelangt das Skript gulp in Ihr PATH, da das globale node/bin/ Verzeichnis ist höchstwahrscheinlich auf Ihrem Pfad.

Um Ihre lokalen Abhängigkeiten zu berücksichtigen, verwendet gulp Ihre lokal installierte Version von sich selbst, um gulpfile.js.

80
Dwayne Crooks

Sie können das global installierte gulp lokal mit verknüpfen

npm link gulp
78
Berislav Lopac

Die Frage " Warum müssen wir gulp global und lokal installieren? " kann in die folgenden zwei Fragen unterteilt werden:

  1. Warum muss ich gulp lokal installieren, wenn ich es bereits global installiert habe?

  2. Warum muss ich gulp global installieren, wenn ich es bereits lokal installiert habe?

Einige andere haben diese Fragen isoliert ausgezeichnet beantwortet, aber ich hielt es für nützlich, die Informationen in einer einheitlichen Antwort zusammenzufassen.

Warum muss ich gulp lokal installieren, wenn ich es bereits global installiert habe?

Das Grundprinzip für die lokale Installation von gulp besteht aus mehreren Gründen:

  1. Indem Sie die Abhängigkeiten Ihres Projekts lokal einbeziehen, stellen Sie sicher, dass die Version von gulp (oder anderen Abhängigkeiten) die ursprünglich vorgesehene Version ist.
  2. Der Knoten berücksichtigt standardmäßig keine globalen Module, wenn er require () verwendet (was Sie benötigen, um gulp in Ihr Skript aufzunehmen). Dies liegt letztendlich daran, dass der Pfad zu den globalen Modulen standardmäßig nicht zu NODE_PATH hinzugefügt wird.
  3. Laut dem Node Entwicklungsteam werden lokale Module schneller geladen. Ich kann nicht sagen, warum dies so ist, aber dies scheint für die Verwendung des Knotens in der Produktion relevanter zu sein (dh Laufzeitabhängigkeiten). Ich nehme an, dass dies ein legitimer Grund ist, da es manchen wichtig ist, welchen kleinen Geschwindigkeitsvorteil das Laden lokaler oder globaler Module bringt.

Warum muss ich gulp global installieren, wenn ich es bereits lokal installiert habe?

  1. Das Grundprinzip für die globale Installation von gulp ist eigentlich nur die Bequemlichkeit, dass die ausführbare Datei von gulp automatisch in Ihrem Systempfad gefunden wird.

Um eine lokale Installation zu vermeiden, können Sie npm link [package] Verwenden, aber der Befehl link sowie der Befehl install --global Scheinen die Option --save-dev Nicht zu unterstützen, was bedeutet, dass dort nicht angezeigt wird um eine einfache Möglichkeit zu sein, gulp global zu installieren und dann einfach die jeweilige Version zu Ihrer lokalen package.json-Datei hinzuzufügen.

Letztendlich halte ich es für sinnvoller, globale Module verwenden zu können, um zu vermeiden, dass Sie die Installation gemeinsamer Tools in all Ihren Projekten duplizieren müssen, insbesondere bei Entwicklungstools wie Grunzen, Schlucken, JShint usw. Leider ist dies der Fall Anscheinend kämpfen Sie am Ende ein wenig gegen die Werkzeuge, wenn Sie gegen den Strich gehen.

64
Derek Greer

Technisch müssen Sie es nicht global installieren, wenn das node_modules Ordner in Ihrer lokalen Installation befindet sich in Ihrem PATH. Im Allgemeinen ist das keine gute Idee.

Alternativ, wenn npm test referenzen gulp dann können Sie einfach npm test und es wird der lokale Schluck laufen.

Ich habe gulp noch nie global installiert - ich denke, es ist eine schlechte Form.

8
robrich

Ich bin mir nicht sicher, ob unser Problem direkt damit zusammenhängt, dass wir gulp nur lokal installiert haben. Aber wir mussten selbst eine Reihe von Abhängigkeiten installieren. Dies führte zu einem "riesigen" package.json und wir sind nicht sicher, ob es wirklich eine gute Idee ist, gulp nur lokal zu installieren. Wir mussten dies aufgrund unserer Build-Umgebung tun. Aber ich würde nicht empfehlen, gulp nicht global zu installieren, wenn es nicht unbedingt notwendig ist. Wir hatten ähnliche Probleme wie im folgenden Blog-Post beschrieben

Keines dieser Probleme tritt bei unseren Entwicklern auf ihren lokalen Computern auf, da sie alle gulp global installiert haben. Auf dem Build-System hatten wir die beschriebenen Probleme. Wenn jemand interessiert ist, könnte ich tiefer in dieses Thema eintauchen. Aber im Moment wollte ich nur erwähnen, dass es kein einfacher Weg ist, gulp nur lokal zu installieren.

2
tschoartschi

Nur weil ich es hier nicht gesehen habe, wenn Sie auf MacOS oder Linux sind, schlage ich vor, dass Sie dies Ihrem PATH hinzufügen (in Ihrem bashrc etc):

node_modules/.bin

Wenn Sie sich mit diesem relativen Pfadeintrag im Stammordner eines Knotenprojekts befinden, können Sie ein beliebiges Befehlszeilentool (eslint, gulp usw. usw.) ausführen, ohne sich Gedanken über "globale Installationen" oder npm run Machen zu müssen. usw.

Sobald ich dies getan habe, habe ich noch nie ein Modul global installiert.

1
Elliot Nelson