Normalerweise können wir die Schluckaufgabe von der Konsole über so etwas ausführen gulp mytask
. Gibt es überhaupt eine Möglichkeit, Parameter an die Schluckaufgabe zu übergeben? Wenn möglich, zeigen Sie bitte beispielhaft, wie es gemacht werden kann.
194
Antworten:
Es ist ein Feature, auf das Programme nicht verzichten können. Sie können Yargs versuchen .
Sie können es so verwenden:
Im Code zum Beispiel:
Für dein Verständnis:
Hoffe du kannst es von hier nehmen.
Es gibt ein anderes Plugin, das Sie verwenden können, Minimist. Es gibt einen weiteren Beitrag, in dem es gute Beispiele für Yargs und Minimisten gibt: ( Ist es möglich, Gulp eine Flagge zu übergeben, damit es Aufgaben auf unterschiedliche Weise ausführt ? )
quelle
(argv.production === undefined) ? false : true;
ist äquivalent zuargv.production !== undefined
.Wenn Sie vermeiden möchten, zusätzliche Abhängigkeiten hinzuzufügen, habe ich Knoten
process.argv
als nützlich empfunden:Also folgendes:
sollte anzeigen:
Wenn Sie sicher sind, dass sich der gewünschte Parameter an der richtigen Position befindet, werden die Flags nicht benötigt. ** Verwenden Sie einfach (in diesem Fall):
ABER: Da die Option möglicherweise nicht festgelegt ist oder sich in einer anderen Position befindet, denke ich, dass eine bessere Idee so etwas wie:
Auf diese Weise können Sie Variationen in mehreren Optionen verarbeiten, z.
** Bearbeiten: true für Knotenskripte, aber gulp interpretiert alles ohne ein führendes "-" als einen anderen Aufgabennamen. Die Verwendung
gulp mytask 123
schlägt also fehl, da gulp keine Aufgabe namens '123' finden kann.quelle
gulp myTask --production
ergibt sichprocess.argv
gleich[pathToNode, pathToGulp, 'myTask', '--production']
Das Übergeben eines Parameters an gulp kann einige Dinge bedeuten:
Hier ist ein Ansatz zum Übergeben von Parametern von der Haupt-Gulpfile an eine Gulp-Aufgabe. Indem Sie die Aufgabe, die den Parameter benötigt, in ein eigenes Modul verschieben und in eine Funktion einschließen (damit ein Parameter übergeben werden kann):
Dies kann nützlich sein, wenn Sie viele Schluckaufgaben haben und ihnen einige praktische Umgebungskonfigurationen übergeben möchten. Ich bin nicht sicher, ob es zwischen einer Aufgabe und einer anderen funktionieren kann.
quelle
Es gibt ein offizielles Schluckrezept dafür mit Minimist .
https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
Die Grundlagen verwenden Minimist, um die cli-Argumente zu trennen und mit bekannten Optionen zu kombinieren:
Welches würde so etwas analysieren
Weitere Informationen finden Sie im Rezept.
quelle
Wenn Sie Umgebungsparameter und andere Dienstprogramme sowie log verwenden möchten , können Sie gulp-util verwenden
Aktualisieren
gulp-util ist jetzt veraltet. Sie können stattdessen Minimist verwenden.
quelle
@ Ethans Antwort würde komplett funktionieren. Nach meiner Erfahrung besteht der Knotenpunkt darin, Umgebungsvariablen zu verwenden. Dies ist eine Standardmethode zum Konfigurieren von Programmen, die auf Hosting-Plattformen (z. B. Heroku oder Dokku) bereitgestellt werden.
Gehen Sie folgendermaßen vor, um den Parameter über die Befehlszeile zu übergeben:
Entwicklung:
gulp dev
Produktion:
NODE_ENV=production gulp dev
Die Syntax ist unterschiedlich, aber sehr Unix und kompatibel mit Heroku, Dokku usw.
Sie können auf die Variable in Ihrem Code unter zugreifen
process.env.NODE_ENV
MYAPP=something_else gulp dev
würde setzen
process.env.MYAPP === 'something_else'
Diese Antwort könnte Ihnen einige andere Ideen geben.
quelle
Hier ist mein Beispiel, wie ich es benutze. Für die CSS / Less-Aufgabe. Kann für alle angewendet werden.
quelle
Hier ist ein anderer Weg ohne zusätzliche Module:
Ich musste die Umgebung anhand des Aufgabennamens erraten. Ich habe eine 'dev'-Aufgabe und eine' prod'-Aufgabe.
Wenn ich starte
gulp prod
, sollte es auf Prod-Umgebung eingestellt sein. Wenn ich laufegulp dev
oder irgendetwas anderes, sollte es auf Entwicklungsumgebung eingestellt sein.Dazu überprüfe ich einfach den Namen der laufenden Aufgabe:
quelle
Wenn Sie Schluck mit Garnen verwenden, beachten Sie Folgendes:
Wenn Sie eine Aufgabe 'Kunde' haben und keine Yargs verwenden möchten, bauen Sie die Parameterprüfung auf erforderliche Befehle ein:
.command("customer <place> [language]","Create a customer directory")
Nennen Sie es mit:yargs wird immer einen Fehler auslösen, dass dem Aufruf nicht genügend Befehle zugewiesen wurden, auch wenn Sie !! - -
Probieren Sie es aus und fügen Sie dem Befehl nur eine Ziffer hinzu (damit er nicht dem Namen der Schluckaufgabe entspricht) ... und es funktioniert:
.command("customer1 <place> [language]","Create a customer directory")
Dies ist die Ursache dafür, dass Schlucken die Aufgabe auslöst, bevor yargs nach diesem erforderlichen Parameter suchen kann. Es hat mich mehrere Stunden gekostet, das herauszufinden.
Hoffe das hilft dir ..
quelle
Ich weiß, dass ich zu spät komme, um diese Frage zu beantworten, aber ich möchte etwas hinzufügen, um @Ethan zu beantworten, die am höchsten bewertete und akzeptierte Antwort.
Wir können verwenden
yargs
, um den Befehlszeilenparameter abzurufen, und damit können wir auch unseren eigenen Alias für einige Parameter wie follow hinzufügen.Bitte beziehen Sie sich auf diesen Link für weitere Details. https://github.com/yargs/yargs/blob/HEAD/docs/api.md
Es folgt die Verwendung eines Alias gemäß der Dokumentation von
yargs
. Wir können dort auch mehryargs
Funktionen finden und die Erfahrung beim Übergeben von Befehlszeilen noch verbessern.quelle
Laden Sie es einfach in ein neues Objekt während des Prozesses.
process.gulp = {}
Lassen Sie die Aufgabe dort suchen.quelle