Javascript 使用翡翠的特征,改变吞咽?

Javascript 使用翡翠的特征,改变吞咽?,javascript,node.js,gulp,pug,Javascript,Node.js,Gulp,Pug,当我对.jade文件进行更改时,我只想对该文件而不是所有文件运行Gulp任务。为此,我使用了gulpchanged。它工作正常,直到我对影响全局布局的文件进行更改,例如\u header.jade,\u layout.jade。当我对这些文件进行更改时,什么都不会发生。我所有的布局文件在标题前都有。。我如何解决这个问题 这是我的gulpfile一些行 gulp.task('jade', function() { return gulp.src('dev/templates/**/!(_)*.ja

当我对
.jade
文件进行更改时,我只想对该文件而不是所有文件运行
Gulp
任务。为此,我使用了
gulpchanged
。它工作正常,直到我对影响全局布局的文件进行更改,例如
\u header.jade
\u 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'));
});

我要做的第一件事是将jade编译任务重构成一个单独的函数。这允许您参数化jade编译,以便可以在您选择的一个或多个文件上运行它:

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');
});
如果更改的文件是部分文件(以
开头)
,我们需要能够确定哪些其他文件受到该更改的影响。这是由图书馆推动的:

最后,每当文件发生更改时,我们仅对受影响的文件调用
compileJade
函数:

gulp.task('watch', function() {
  gulp.watch('dev/templates/**/*.jade').on('change', function(changedFile) {
    return compileJade(isPartial(changedFile) ? findAffectedFiles(changedFile) : changedFile);
  });
});
gulp.task('watch', function() {
  gulp.watch('dev/templates/**/*.jade').on('change', function(changedFile) {
    return compileJade(isPartial(changedFile) ? findAffectedFiles(changedFile) : changedFile);
  });
});