2016-07-13 7 views
0

Ich habe einen Ordner mit HTML-Dateien, die oben einen Kommentar mit Metadaten enthalten. Ich möchte eine gulp-replace Operation ausführen, wenn die Metadaten mit einer Regex übereinstimmen, und eine andere gulp-replace -Operation, wenn sie nicht übereinstimmt, und dann mit dem Rest der Task-Pipeline fortfahren. Wenn versucht, verschiedene Iterationen gulp-if verwenden, aber es ergibt sich immer in „Typeerror: nicht definiert ist keine Funktion“ Fehlergulp-replace, wenn der Inhalt von Dateien mit Regex übereinstimmt

import gulp from 'gulp'; 
import plugins from 'gulp-load-plugins'; 

const $ = plugins(); 

function preprocess() { 
    var template_data = new RegExp('<!-- template_language:(\\w+)? -->\n', 'i'); 
    var handlebars = new RegExp('<!-- template_language:handlebars -->', 'i'); 
    var primaryColor = new RegExp('#dc002d', 'gi'); 
    var mailchimpColorTag = '*|PRIMARY_COLOR|*'; 
    var handlebarsColorTag = '{{PRIMARY_COLOR}}'; 

    var replaceCondition = function (file) { 
    return file.contents.toString().match(handlebars); 
    } 

    return gulp.src('dist/**/*.html') 
    .pipe($.if(
     replaceCondition, 
     $.replace(primaryColor, handlebarsColorTag), 
     $.replace(primaryColor, mailchimpColorTag) 
    )) 
    .pipe($.replace, template_data, '') 
    .pipe(gulp.dest('dist')); 
} 

Was ist der effizienteste Weg, um dies zu realisieren?

+0

Es ist '.pipe ($. Ersetzen (template_data, ''))' 'nicht .pipe ($. Ersetzen, template_data, '')' –

+0

Interessant, hatte der Rahmen war ich mit beiden Varianten in seinem gulpfile. –

Antwort

0

gulp-filter war die Antwort. Während gulp-if verwendet werden kann, um zu entscheiden, ob eine bestimmte Operation auf den gesamten Datenstrom angewendet werden soll, kann gulp-filter verwendet werden, um zu entscheiden, auf welche Dateien in einem Datenstrom eine Operation angewendet werden soll.

import gulp from 'gulp'; 
import plugins from 'gulp-load-plugins'; 

const $ = plugins(); 

function preprocess() { 
    var template_language = new RegExp('<!-- template_language:(\\w+)? -->\n', 'i'); 
    var handlebars = 'handlebars'; 
    var primaryColor = new RegExp('#dc002d', 'gi'); 
    var handlebarsColorTag = '{{PRIMARY_COLOR}}'; 
    var handlebarsCondition = function (file) { 
    var match = file.contents.toString().match(template_language); 
    return (match && match[1] == handlebars); 
    } 
    var handlebarsFilter = $.filter(handlebarsCondition, {restore: true}); 
    var mailchimpColorTag = '*|PRIMARY_COLOR|*'; 
    var mailchimpCondition = function (file) { 
    return !handlebarsCondition(file); 
    } 
    var mailchimpFilter = $.filter(mailchimpCondition, {restore: true}); 

    return gulp.src('dist/**/*.html') 
    .pipe(handlebarsFilter) 
    .pipe($.replace(primaryColor, handlebarsColorTag)) 
    .pipe($.debug({title: 'Applying ' + handlebarsColorTag})) 
    .pipe(handlebarsFilter.restore) 
    .pipe(mailchimpFilter) 
    .pipe($.replace(primaryColor, mailchimpColorTag)) 
    .pipe($.debug({title: 'Applying ' + mailchimpColorTag})) 
    .pipe(mailchimpFilter.restore) 
    .pipe($.replace(template_language, '')) 
    .pipe(gulp.dest('dist')); 
} 
Verwandte Themen