2016-07-19 8 views
1

ich schluck bin mit Abschlags-Dateien in HTML zu konvertieren, und mit Hilfe der gulp-watch Plugin (nicht die gulp.watch API-Funktion) Dateien neu zu erstellen, wenn sie sich ändern. Funktioniert super!wenn Änderungen an der Vorlage

gulp.task('markdown', function() { 
    gulp.src('src/**/*.md') 
     .pipe(watch('src/**/*.md')) 
     .pipe(markdown()) 
     .pipe(template('templates/md.tpl')) 
     .pipe(gulp.dest('dist')); 
}); 

Das Problem ist, dass die Pipeline src die Abschlags-Dateien, aber innerhalb der Pipeline ich verweisen auch eine Vorlagendatei. Wenn sich diese Vorlage ändert, müssen alle Markdown-Dateien neu erstellt werden. Gibt es eine Möglichkeit, diese Abhängigkeit in der Schluck-/Schluck-Uhr auszudrücken?

ich mit gulp.watch versucht (der API-Funktion), um die Vorlage zu beobachten und die ‚Abschlag‘ Aufgabe ausführen, wenn sie sich ändert ...

gulp.watch('templates/md.tpl', ['markdown']); 

... aber das hat nicht funktioniert. Nichts passiert. Ich nehme an, dass Schluckaufpassen in der Pipeline verhindert, dass es irgendwas macht.

Ich denke, ich könnte zwei Aufgaben erstellen, eine mit Schluckuhr und eine ohne, und die ohne, um eine vollständige Neuerstellung zu erzwingen. Das möchte ich lieber nicht, denn dann wird es ein andauerndes Problem, die beiden synchron zu halten.

Gibt es einen besseren Weg?

Antwort

1

Ich glaube, ich könnte eine zwei Aufgaben erstellen, eine mit großen Schluck-Uhr und eine ohne, und verwenden Sie das eine ohne eine Kraft vollständige Neuerstellung Das möchte ich lieber nicht, denn dann wird es ein andauerndes Problem, die beiden synchron zu halten.

Denken Sie daran, Schluck ist nur JavaScript.

Schreiben Sie einfach eine Funktion, die den Stream mit oder ohne den watch() Schritt abhängig von einem Parameter erstellt, den Sie übergeben. Mit dem gulp-if Plugin können Sie so etwas sehr übersichtlich schreiben (obwohl es nicht nötig ist und ohne es gemacht werden könnte).

Hier ist, wie ich es tun würde:

var gulpIf = require('gulp-if'); 

function processMarkdown(opts) { 
    gulp.src('src/**/*.md') 
    .pipe(gulpIf(opts.watch, watch('src/**/*.md'))) 
    .pipe(markdown()) 
    .pipe(template('templates/md.tpl')) 
    .pipe(gulp.dest('dist')); 
} 

gulp.task('markdown', function() { 
    processMarkdown({watch: true}); 
    watch('templates/md.tpl', function() { 
    processMarkdown({watch: false}); 
    }); 
}); 
0

Sie können schluck src als ein Array angeben, auch:

gulp.src(['src/**/*.md', 'templates/md.tpl']) 
+0

Ich weiß, dass Sie mehrere Platzhalter 'src' verwenden können, aber ich bin nicht sicher, wie das hilft. Wie würde das Ändern der Vorlage dazu führen, dass alle Markdown-Dateien neu erstellt werden? Und würde ich nicht auch mit der Vorlagendatei in der Pipeline enden? Ich möchte die Vorlage selbst nicht in der Markdown-Pipeline verarbeiten. – jpm42