2016-05-09 12 views
0

Ich möchte nur die .less Dateien kompilieren, die sich geändert haben, um meinen Debug/Coding-Workflow zu beschleunigen.gulp-geändert mit schluck-concat funktioniert nicht

Hier ist meine Aufgabe schluck:

gulp.src('core/**/*.less') 
    .pipe(changed('core')) 
    .pipe(less().on('error', handleError)) 
    .pipe(autoprefixer('last 2 version')) 
    .pipe(remember()) 
    .pipe(concat('main.min.css')) 
    .pipe(gulp.dest('core')) 
    .on('end', resolve) 
    .on('error', reject); 

I gulp-changed verwendet, und weil es zuerst nicht funktioniert, habe ich versucht gulp-remember auch zu verwenden, aber ohne Wirkung. Die Uhr funktioniert, es kompiliert super schnell, aber es hat überhaupt keine Wirkung.

Wenn ich changed('core') und remember() entferne es funktioniert, aber es ist langsamer (etwa 16 Sekunden).

Antwort

1

gulp-changed ist eine schlechte Passform für Ihren Anwendungsfall, da es Eingabedateien mit Ausgabedateien auf der Festplatte vergleichen soll.

Angenommen, Sie haben eine Eingabedatei core/foo/bar.less, die Sie durch changed('dist') leiten. Was dies bedeutet, ist eine Ausgabedatei dist/foo/bar.less suchen. Wenn die Eingabedatei neuer als die Ausgabedatei ist, wird sie übergeben. Sonst wird es herausgefiltert.

Das bedeutet, changed('core') kann unmöglich funktionieren. Es vergleicht die Eingabedatei core/foo/bar.less mit der Ausgabedatei core/foo/bar.less. Aber sie sind die gleiche Datei. Das bedeutet, dass die Eingabedatei niemals neuer als die Ausgabedatei sein kann und nie durchgeleitet wird.

Es gibt ein anderes Problem. Sie haben nicht für jede Eingabedatei eine Ausgabedatei. Alle Ihre .less Dateien sind in einemain.min.css Datei kompiliert. Während Sie dies mit einem custom comparator arbeiten können, funktioniert es nicht aus der Box.

Was Sie eigentlich wollen, ist gulp-cached. Anstatt jede Eingabedatei mit einer Ausgabedatei auf der Festplatte zu vergleichen, vergleicht sie jede Eingabedatei mit einer früheren Version derselben Datei, die im Arbeitsspeicher zwischengespeichert wurde.

var cached = require('gulp-cached'); 

gulp.task('css', function() { 
    return gulp.src('core/**/*.less') 
    .pipe(cached('less')) 
    .pipe(less()) 
    .pipe(autoprefixer('last 2 version')) 
    .pipe(remember('less')) 
    .pipe(concat('main.min.css')) 
    .pipe(gulp.dest('core')); 
}); 
+0

Sehr gut erklärt. Ich muss davon ausgehen, dass ich mir nicht wirklich die Zeit genommen habe, um genau zu verstehen, wie sich Schluck-verändert/Schluck-erinnern/Schluck-cached funktioniert. Ich habe gerade ein Tutorial gesehen, das erklärt, dass Schluck-Änderung schön ist und ein Codebeispiel und ich missverstehe total die Basis. Ihre Erklärung ist sehr klar und präzise, ​​vielen Dank für die Zeit, die Sie nehmen, um mir zu antworten. Es funktioniert, aber ich werde mein Wissen über dieses Cached/Remember verbessern, um Probleme damit später zu vermeiden ;-) – Adavo

Verwandte Themen