Frage Mit del in gulp.series ()


Ich versuche, Ordner vor Startaufgaben in Schluck 4 zu säubern

var gulp = require('gulp');
var del = require('del');

gulp.task('clean', function() {
    del.sync('folder/*');
});

gulp.task('foo', gulp.series('clean', 'something'));

Es funktioniert nicht, weil 'clean' Aufgabe muss einen Stream zurückgeben. Ich habe eine Problemumgehung gefunden:

gulp.task('clean', function() {
    del.sync('folder/*');
    var emptyStream = gulp.src([]).pipe(gulp.dest('/'));
    return emptyStream;
});

, aber immer noch hoffen, eine bessere Lösung zu finden.


5
2018-03-27 21:23


Ursprung


Antworten:


Schluck erlaubt drei Optionen für die Verwaltung der Asynchronität. Wenn eine Funktion beendet wird (gibt nichts / undefined oder einen einfachen Wert zurück), betrachtet schluck die Aufgabe als erledigt und geht weiter. Wenn es sich bei Ihrer Aufgabe jedoch um eine asynchrone Aufgabe handelt (so viel ist im Knoten), dann ...

  1. Gib einen Stream zurück. return gulp.src(...).pipe(gulp.dest(...)); Beachten Sie, dass der Rückgabewert ein Stream ist, da gulp.src und .pipe Streams zurückgeben.
  2. Zurücksenden a Versprechen.
  3. Verwenden Sie einen Rückruf. Wenn Sie eine Variable in das Argument der Funktion einfügen, wird gulp erwarten, dass der Callback aufgerufen wird und darauf warten, dass dies geschieht. Wenn dem Callback ein Wert als Argument übergeben wird, gilt dies als Fehler, und ein Aufruf ohne Wert wird als Erfolg gewertet.

Im Fall von del tut es nicht die ersten beiden, sondern nimmt einen Rückruf, der dasselbe wie in Szenario 3 behandelt.

gulp.task('clean', function(done) {
  del(['output'], done);
});

Beispiele

Hier ein Beispiel für die Verwendung eines Callbacks, der manuell mit einem Stream aufgerufen wird:

gulp.task('foo', function(done) {
  gulp.src('input')
    .pipe(gulp.dest('output'))
    .on('end', function() {
      done();
    })
    .on('error', function(err) {
      done(err);
    });
});

Da Streams so weit verbreitet sind, wird man das obige für dich tun. (Beachten Sie das done wurde entfernt, damit Schluck nicht erwartet, dass es genannt wird).

gulp.task('foo', function() {
  return gulp.src('input')
    .pipe(gulp.dest('output'));
});

Nicht alles kann ein Stream sein, und die Rückrufe können sich als schwierig erweisen, sodass Sie stattdessen ein Versprechen abgeben können:

gulp.task('foo', function() {
  return new Promise(function(resolve) {
    setTimeout(resolve, 5000);
  });
});

5
2018-03-28 03:18



Sie können den Callback auch an den Clean-Task übergeben, um den Stream zurückzugeben

var del = require('del');

gulp.task('clean', function(cb) {
    del(['output'], cb);
});

Guck mal Hier


5
2018-03-28 02:57



Direkt von schlucke 4,0 Proben, gib einfach das Versprechen zurück:

Funktion sauber () {
  // Sie können mehrere Globbing-Muster verwenden wie mit `gulp.src`,
  // Wenn Sie zum Beispiel del 2.0 oder höher verwenden, geben Sie das Versprechen ein
  return del (['Vermögen']);
}

1
2018-06-22 06:39