Ich habe eine globale Aufgabe, die einige Unteraufgaben nacheinander (synchron) ausführen muss. Ich habe den Abhängigkeitsmechanismus der Aufgabe verwendet, um diese "synchrone" Logik zu handhaben:

// main task
gulp.task('deploy', ['build', 'upload', 'extract', 'migrate'], function() {
    // task returns a stream 
});

// sub tasks
gulp.task('migrate', ['extract'], function() {
    // task returns a stream
});

gulp.task('extract', ['upload'], function() {
    // task returns a stream
});

gulp.task('upload', ['build'], function() {
    // task returns a stream
});

gulp.task('build', [], function() {
    // task returns a stream
});

Abhängigkeiten funktionieren gut und werden alle nacheinander ausgeführt. Aber wie kann ich jetzt migrate aufrufen, ohne extract>upload>build auszuführen? Weil ich manchmal manuell anrufen möchte:

gulp build
gulp upload
gulp extract

Und ich möchte nicht, dass jede Aufgabe alle Abhängigkeiten erneut ausführt ...

Vielen Dank

2
Jscti 18 Aug. 2015 im 16:38

3 Antworten

Beste Antwort

Am Ende macht das Run-Sequence -Plugin wirklich gute Arbeit:

var runner = require('run-sequence');

// main task
gulp.task('deploy', [], function() {
    runner(
        'build',
        'upload',
        'extract',
        'migrate'
    );
});

// sub tasks
gulp.task('migrate', ['extract'], function() {
    // task returns a stream
});

gulp.task('extract', ['upload'], function() {
    // task returns a stream
});

gulp.task('upload', ['build'], function() {
    // task returns a stream
});

gulp.task('build', ['clean:build'], function() {
    // task returns a stream
});

gulp.task('clean:build', [], function() {
    // task returns a stream
});

Auf diese Weise kann ich jede Unteraufgabe unabhängig aufrufen, ohne vorherige Unteraufgaben erneut auszuführen ...

0
Words Like Jared 31 Jän. 2016 im 21:17

Ich habe (2) Versionen jeder Aufgabe definiert, die ich isolieren möchte, aber sie müssen dieselbe Logik aufrufen, damit ich mich nicht wiederhole.

In meinem aktuellen Projekt habe ich beispielsweise eine e2e-tests-development Aufgabe, die von build-development abhängt und die sowohl den Server als auch den Client erstellt, bevor e2e-Tests ausgeführt werden. Manchmal möchte ich nur die Tests erneut ausführen und nicht die gesamte Anwendung neu erstellen.

Meine e2e-tests-development.js Datei sieht ungefähr so aus:

var gulp = require('gulp');
// Omitted...

gulp.task('e2e-tests-development',
    ['build-development'],
    _task);

gulp.task('e2e-tests-development-isolated',
    [], // no dependencies for the isolated version of the task.
    _task);

function _task() {
    // Omitted...
}

Und natürlich würden Sie gulp mit e2e-tests-development-isolated anstelle von e2e-tests-development aufrufen, wenn Sie nur diese Aufgabe ausführen möchten.

(Natürlich braucht gulp wirklich ein --no-depedencies Flag von der Kommandozeile ...)

1
Words Like Jared 31 Jän. 2016 im 21:46

Wenn Sie den 2-Versionen-Ansatz wie ich benötigen, reicht die folgende Lösung aus:

gulp.task('deploy:build', ['build'], function () {
    gulp.start('deploy');
}

Jetzt kann ich Deploy aufrufen, ohne vom Build abhängig zu sein.

0
Gunter Reinitzer 21 Dez. 2017 im 12:09