2016-11-08 6 views
1

.jadeファイルに変更を加えると、そのファイルに対してのみ実行されるGulpタスクが、すべてのファイルに対して実行されません。そのために私はgulp-changedを使用しています。グローバルレイアウトに影響するファイルを変更するまでは、うまくいきます。たとえば、_header.jade_layout.jadeなどです。そのファイルを変更すると何も起こりません。すべての私のレイアウトファイルはタイトルの前に_を持っています。どうすればこの問題を解決できますか?ここで泥だらけの特徴を変えて使用する?

は私gulpfileは、私がどうなる

gulp.task('jade', function() { 
return gulp.src('dev/templates/**/!(_)*.jade') 
    .pipe(plumber({ 
     errorHandler: onError 
    })) 
    .pipe(changed('public', {extension: '.html'})) 
    .pipe(jade({ 
     pretty: true, 
    })) 
    .pipe(gulp.dest('public')) 
    .pipe(browserSync.reload({ 
     stream: true 
    })); 
}); 

gulp.task('watch', function() { 
    gulp.watch('dev/templates/**/*.jade', gulp.series('jade')); 
}); 

答えて

1

最初のものは、別の関数にあなたのヒスイのコンパイルタスクをリファクタリングすることでいくつかの行です。それはあなたがあなたの選択の一個の以上のファイルでそれを実行できるように、あなたのヒスイのコンパイルをパラメータ化することができます:

function compileJade(files) { 
    return gulp.src(files, {base:'dev/templates'}) 
    .pipe(plumber({ 
     errorHandler: onError 
    })) 
    .pipe(jade({ 
     pretty: true, 
    })) 
    .pipe(gulp.dest('public')) 
    .pipe(browserSync.reload({ 
     stream: true 
    })); 
} 

既存jade仕事は、今単にその関数を呼び出します。

gulp.task('jade', function() { 
    return compileJade('dev/templates/**/!(_)*.jade'); 
}); 

変更した場合ファイルは部分的であり(_で始まります)、その変更の影響を受ける他のファイルを特定できる必要があります。これはjade-inheritanceライブラリによって促進される:

gulp.task('watch', function() { 
    gulp.watch('dev/templates/**/*.jade').on('change', function(changedFile) { 
    return compileJade(isPartial(changedFile) ? findAffectedFiles(changedFile) : changedFile); 
    }); 
}); 
:ファイルの変更は、我々は唯一の影響を受けるファイルのため compileJade関数を呼び出す

var JadeInheritance = require('jade-inheritance'); 
var path = require('path'); 

function isPartial(file) { 
    return path.basename(file).match(/^_.*/); 
} 

function findAffectedFiles(changedFile) { 
    return new JadeInheritance(changedFile, 'dev/templates', {basedir: 'dev/templates'}) 
    .files 
    .filter(function(file) { return !isPartial(file); }) 
    .map(function(file) { return 'dev/templates/' + file; }) 
} 

最後にいつでも

関連する問題