Normalerweise sehen Aufgaben in Gulp folgendermaßen aus:
gulp.task('my-task', function() {
return gulp.src(options.SCSS_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
Ist es möglich, ein Befehlszeilenflag an gulp zu übergeben (das ist keine Aufgabe) und Aufgaben basierend darauf ausführen zu lassen? Zum Beispiel
$ gulp my-task -a 1
Und dann in meiner gulpfile.js:
gulp.task('my-task', function() {
if (a == 1) {
var source = options.SCSS_SOURCE;
} else {
var source = options.OTHER_SOURCE;
}
return gulp.src(source)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
javascript
node.js
gulp
Asolberg
quelle
quelle
process.argv
auf die Befehlszeilenargumente zugreifen.Antworten:
Gulp bietet dafür keine Verwendung an, aber Sie können einen der vielen Parser für Befehlsargumente verwenden. Ich mag
yargs
. Sollte sein:Sie können es auch kombinieren,
gulp-if
um den Stream bedingt weiterzuleiten. Dies ist sehr nützlich für die Erstellung von Entwicklern und Produkten:Und mit
gulp my-js-task
oder anrufengulp my-js-task --production
.quelle
npm run gulp
dann verwenden, sollten Sie es wie verwendennpm run gulp -- --production
.Bearbeiten
gulp-util
ist veraltet und sollte vermieden werden, daher wird empfohlen, stattdessen Minimist zu verwendengulp-util
bereits verwendeten verwenden.Also habe ich einige Zeilen in meiner Gulpfile geändert, um sie zu entfernen
gulp-util
:Original
In meinem Projekt verwende ich das folgende Flag:
Gulp bietet dafür ein Objekt
gulp.env
an. Es ist in neueren Versionen veraltet, daher müssen Sie dafür gulp-util verwenden. Die Aufgaben sehen folgendermaßen aus:Die Umgebungseinstellung ist für alle Unteraufgaben verfügbar. Also kann ich dieses Flag auch für die Überwachungsaufgabe verwenden:
Und meine Stilaufgabe funktioniert auch.
Ciao Ralf
quelle
gulp.env
wird veraltet , wie Sie an der Konsolenprotokollmeldung sehen können, wenn Sie es ausführen. Sie bitten Sie, Ihren eigenen Parser zu verwenden undyargs
oder vorzuschlagenminimist
.util.env.theme ? util.env.theme : 'main'
zuutil.env.theme || 'main'
. Wie auch immer +1.gulp-util
Verwendet dieminimist
Bibliothek zum Parsen von Befehlszeilenargumenten. Wenn Sie also verwendengulp-util
, benötigen Sie zu diesem Zweck keine zusätzliche Bibliothek. Dokument: github.com/substack/minimistHier ist ein kurzes Rezept, das ich gefunden habe:
gulpfile.js
CLI
Originalreferenz (nicht mehr verfügbar): https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-params-from-cli.md
Alternative mit Minimist
Aus der aktualisierten Referenz: https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
gulpfile.js
CLI
quelle
Es gibt eine sehr einfache Möglichkeit,
on/off
Flags zu erstellen, ohne die Argumente zu analysieren.gulpfile.js
ist nur eine Datei, die wie jede andere ausgeführt wird. Sie können also Folgendes tun:Und verwenden Sie so etwas wie
gulp-if
, um einen Schritt bedingt auszuführenDurch das Ausführen
gulp build
wird ein schönes HTML erstellt, währendgulp production build
es minimiert wird.quelle
gulp.task('mytask', function() { if (flags.myflag ) { flaggedtask } else { unflaggedask } });
flags
.Wenn Sie einige strenge (geordnete!) Argumente haben, können Sie diese einfach durch Überprüfen erhalten
process.argv
.Führ es aus:
gulp --env production
... aber ich denke , dass dies tooo streng und nicht kugelsicher! Also habe ich ein bisschen rumgespielt ... und am Ende diese Utility-Funktion erhalten:
Es frisst einen Argumentnamen und sucht danach in
process.argv
. Wenn nichts gefunden wurde, spuckt es ausnull
. Andernfalls wird zurückgegeben, wenn es sich nicht um das nächste Argument handelt oder wenn das nächste Argument ein Befehl und kein Wert ist (wir unterscheiden uns durch einen Bindestrich)true
. (Das liegt daran, dass der Schlüssel existiert, aber es gibt einfach keinen Wert). Wenn alle vorherigen Fälle fehlschlagen, erhalten wir den nächsten Argumentwert.> gulp watch --foo --bar 1337 -boom "Foo isn't equal to bar."
Ok, genug für jetzt ... Hier ist ein einfaches Beispiel mit gulp :
Starte es
gulp --env production
quelle
if (args[0] === '--env' && args[1] === 'production');
Dem Argumentnamen sollte ein Bindestrich vorangestellt werden: mindestens in gulp 3.8.11Ich habe ein Plugin erstellt, um Parameter über die Befehlszeile in den Task-Rückruf einzufügen.
https://github.com/stoeffel/gulp-param
Wenn jemand einen Fehler findet oder eine Verbesserung hat, bin ich glücklich, PRs zusammenzuführen.
quelle
Und wenn Sie Typoskript (
gulpfile.ts
) verwenden, tun Sie dies füryargs
(basierend auf @Caio Cunhas hervorragender Antwort https://stackoverflow.com/a/23038290/1019307 und anderen obigen Kommentaren):Installieren
.ts
DateienFügen Sie dies zu den .ts-Dateien hinzu:
Dies muss in jeder .ts-Datei einzeln erfolgen (auch in den
tools/tasks/project
Dateien, die in die importiert werdengulpfile.ts/js
).Lauf
Oder unter
npm
dem Arg durch schlucken:quelle
Übergeben Sie Argumente über die Befehlszeile
Dann laufen Sie schlucken mit:
Quelle
quelle
CLI
gulp production
ruft meine Produktionsaufgabe auf und setzt ein Flag für alle Bedingungen.quelle
Wir wollten eine andere Konfigurationsdatei für verschiedene Umgebungen übergeben - eine für Produktion , Entwicklung und Test . Dies ist der Code in der Gulp-Datei:
Dies ist der Code in der Datei app.js:
Und dann schlucken
--env=testing
quelle
Es ist einige Zeit her, seit diese Frage gestellt wurde, aber vielleicht hilft sie jemandem.
Ich verwende GULP CLI 2.0.1 (global installiert) und GULP 4.0.0 (lokal installiert). So machen Sie es ohne zusätzliches Plugin. Ich denke, der Code ist ziemlich selbsterklärend.
Und laufen Sie von der Konsole aus:
Dann laufen Sie und sehen Sie die Unterschiede:
quelle