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?
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?
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.
Das npx
mitgelieferte Dienstprogramm npm
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 beginnen npx
). Wenn Sie beispielsweise eine lokal installierte Datei aufrufen möchten eslint
, haben Sie folgende Möglichkeiten:
npx eslint .
Bei Verwendung in einem script
Feld Ihrer package.json wird npm
nach node_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):
"devDependencies": {
"gulp": "3.5.2"
}
"scripts": {
"test": "gulp test"
}
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.
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.
./node_modules/.bin/gulp
.
gulp
und coffee
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 angezeigt Local 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 :
Der Grund dafür ist, dass
gulp
versucht wirdgulpfile.js
, Ihre lokal installierte Version von auszuführengulp
(siehe hier) . Daher der Grund für eine globale und lokale Installation von gulp.
Wenn Sie gulp
das Skript lokal installieren, befindet es sich im Wesentlichen nicht in Ihrem PATH
und Sie können daher nicht einfach eingeben gulp
und erwarten, dass die Shell den Befehl findet. Durch die globale Installation gelangt das gulp
Skript in Ihr Verzeichnis, PATH
da sich das globale node/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ühren gulpfile.js
.
gulp
Paket wird für die Eingabe node_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üpfen
npm link gulp
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 der install --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.
Technisch gesehen müssen Sie es nicht global installieren, wenn sich der node_modules
Ordner in Ihrer lokalen Installation in Ihrem befindet PATH
. Im Allgemeinen ist dies keine gute Idee.
Alternativ, wenn npm test
Referenzen, gulp
dann können Sie einfach eingeben npm test
und es wird der lokale Schluck ausgeführt.
Ich habe gulp noch nie global installiert - ich denke, es ist eine schlechte Form.
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.
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.):
node_modules/.bin
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.