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?
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.
Das Dienstprogramm npx
, das mit npm
5.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 .
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.
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.
TLDR; Hier ist warum :
Der Grund dafür ist, dass
gulp
versucht, Ihrgulpfile.js
Verwenden Sie Ihre lokal installierte Version vongulp
, 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
.
Sie können das global installierte gulp
lokal mit verknüpfen
npm link gulp
Die Frage " Warum müssen wir gulp global und lokal installieren? " kann in die folgenden zwei Fragen unterteilt werden:
Warum muss ich gulp lokal installieren, wenn ich es bereits global installiert habe?
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:
Warum muss ich gulp global installieren, wenn ich es bereits lokal installiert habe?
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.
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.
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.
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.