2 Handbücher über gulp besagen, dass ich gulp zuerst global (mit dem Flag -g) und dann noch einmal lokal installieren muss. Warum brauche ich das?
javascript
gulp
Stepan Suworow
quelle
quelle
Antworten:
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 schlecht, da sie die Bereitstellung erschweren.
npm 5.2+
Das
npx
mitgelieferte Dienstprogrammnpm
5.2
löst dieses Problem. Damit können Sie lokal installierte Dienstprogramme wie global installierte Dienstprogramme aufrufen (Sie müssen den Befehl jedoch mit beginnennpx
). Wenn Sie beispielsweise eine lokal installierte Datei aufrufen möchteneslint
, haben Sie folgende Möglichkeiten:npm <5,2
Bei Verwendung in einem
script
Feld Ihrer package.json wirdnpm
nachnode_modules
dem Tool sowie nach global installierten Modulen gesucht , sodass die lokale Installation ausreichend ist.Also, wenn Sie zufrieden sind mit (in Ihrem package.json):
usw. und
npm run test
wenn Sie mit laufen , sollten Sie die globale Installation überhaupt nicht benötigen.Beide Methoden sind nützlich, um Leute mit Ihrem Projekt einzurichten, da sie
sudo
nicht benötigt werden.gulp
Dies bedeutet auch, dass die Version aktualisiert wird, wenn die Version in package.json gestoßen wird, sodass jeder bei der Entwicklung mit Ihrem Projekt dieselbe Version von gulp verwendet.Nachtrag:
Es scheint, dass Gulp bei globaler Verwendung ein ungewöhnliches Verhalten aufweist. Bei Verwendung als globale Installation sucht gulp nach einem lokal installierten gulp, an den die Kontrolle übergeben werden kann. Daher erfordert eine globale gulp-Installation eine lokale gulp-Installation, um zu funktionieren. Die obige Antwort bleibt jedoch bestehen. Lokale Installationen sind globalen Installationen immer vorzuziehen.
quelle
./node_modules/.bin/gulp
.gulp
undcoffee
daher funktionieren die Befehle von meinem Knotenprojektstamm aus (z. B.alias gulp="node_modules/.bin/gulp"
). Auf diese Weise sind die Befehle bei Bedarf einfach zu verwenden und es treten keine globalen / lokalen Versionskonflikte auf.gulp
, wird die folgende Fehlermeldung angezeigtLocal gulp not found in ...
. Soweit ich weiß, sollte es sich zuerst mit lokalen node_modules befassen, und wenn es nicht gefunden wird, sollte es sich dann mit global installierten Modulen befassen, nicht wahr? Vielen Dank!TLDR; Hier ist der Grund :
Wenn Sie
gulp
das Skript lokal installieren, befindet es sich im Wesentlichen nicht in IhremPATH
und Sie können daher nicht einfach eingebengulp
und erwarten, dass die Shell den Befehl findet. Durch die globale Installation gelangt dasgulp
Skript in Ihr Verzeichnis,PATH
da sich das globalenode/bin/
Verzeichnis höchstwahrscheinlich auf Ihrem Pfad befindet.Um Ihre lokalen Abhängigkeiten zu berücksichtigen,
gulp
verwenden Sie Ihre lokal installierte Version von sich selbst, um die auszuführengulpfile.js
.quelle
gulp
Paket wird für die Eingabenode_modules/.bin/gulp
des Pfads benötigt. Speicher ist billig, aber MB für die Simulation eines Symlinks wegzuwerfen ist IMO reine Schlamperei.Sie können die global
gulp
lokal installierten mit verknüpfenquelle
npm link
.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 hervorragend beantwortet, aber ich dachte, es wäre vorteilhaft, die Informationen in einer einheitlichen Antwort zusammenzufassen.
Warum muss ich gulp lokal installieren, wenn ich es bereits global installiert habe?
Die Gründe für die lokale Installation von gulp bestehen 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 verwenden
npm link [package]
, aber der Link-Befehl sowie derinstall --global
Befehl scheinen die--save-dev
Option nicht zu unterstützen, was bedeutet, dass es keine einfache Möglichkeit zu geben scheint, gulp global zu installieren und dann einfach die jeweilige Version hinzuzufügen Ihre lokale package.json-Datei.Letztendlich halte ich es für sinnvoller, globale Module zu verwenden, um zu vermeiden, dass die Installation gemeinsamer Tools in all Ihren Projekten dupliziert werden muss, insbesondere bei Entwicklungstools wie Grunzen, Schlucken, Jshint usw. Leider Anscheinend kämpfst du ein bisschen gegen die Werkzeuge, wenn du gegen den Strich gehst.
quelle
Technisch gesehen müssen Sie es nicht global installieren, wenn sich der
node_modules
Ordner in Ihrer lokalen Installation in Ihrem befindetPATH
. Im Allgemeinen ist dies keine gute Idee.Alternativ, wenn
npm test
Referenzen,gulp
dann können Sie einfach eingebennpm test
und es wird der lokale Schluck ausgeführt.Ich habe gulp noch nie global installiert - ich denke, es ist eine schlechte Form.
quelle
Ich bin mir nicht sicher, ob unser Problem direkt mit der Installation von gulp nur lokal zusammenhängt. Aber wir mussten selbst eine Reihe von Abhängigkeiten installieren. Dies führte zu einem "riesigen" package.json und wir sind uns 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-Beitrag beschrieben
Keines dieser Probleme tritt bei einem unserer Entwickler auf seinen lokalen Computern auf, da alle global gulp 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.
quelle
Nur weil ich es hier nicht gesehen habe, wenn Sie unter MacOS oder Linux arbeiten, schlage ich vor, dass Sie dies Ihrem PFAD hinzufügen (in Ihrem Bashrc usw.):
Mit diesem relativen Pfadeintrag können Sie, wenn Sie sich im Stammordner eines Knotenprojekts befinden, jedes Befehlszeilentool (eslint, gulp usw. usw.) ausführen, ohne sich um "globale Installationen"
npm run
usw. kümmern zu müssen .Einmal habe ich noch nie ein Modul global installiert.
quelle