gulp-pug:仅对已更改的文件进行编译(带"包括"" extends")

时间:2018-05-04 01:18:37

标签: gulp pug gulp-watch

考虑以下文件系统:

哈巴狗

test1.pug

test2.pug

部分

partial1.pug

使用gulp任务

gulp.task('pug', () => {
  return gulp.src('pug/*.pug')
  .pipe(pug())
  .pipe(gulp.dest('dist'))
});

即使我们仅编辑 test1.pug ,也会编译 test1.pug test2.pug 。如果要将任务更改为

gulp.task('pug', () => {
  return gulp.src('pug/*.pug', {since: gulp.lastRun('pug')})
  .pipe(pug())
  .pipe(gulp.dest('dist'))
});

因为第二个哈巴狗'通过 gulp-watch 运行,更改或仅传递新文件。但是,如果将partial1.pug添加到test1.pug,该怎么办? (假设gulp.watch观察所有文件。)

test1.pug

doctype html
html
  head
    title Test 1
  body
    h1 Test 1
    include partials/partial1.pug

如果我们编辑 test1.pug ,当然会编译它。但是,如果我们修改 partial1.pug ,则{since: gulp.lastRun('pug')}将不会传递test1.pug。

我不知道如何解决这个问题,但我想,我们需要在文件或已编译的html中过滤组装好的pug但在输出之前。如果有可能......

更新

也许我没有清楚地解释所需的结果。我们需要:

  • test1.pug 已编辑→仅编译 test1.pug
  • partial1.pug 已编辑→仅编译 test1.pug
  • test2.pug 已编辑→仅编译 test2.pug

让我再说一遍 partial1.pug 包含在 test1.pug 中,但不包括 test2.pug

1 个答案:

答案 0 :(得分:1)

在此阶段无法查看src模式之外的依赖关系。它们稍后在管道中添加(pug())。 为了支持您的用例,Gulp需要有一种方法来收集下游变换器的依赖关系。目前,这超出了Gulp的范围(这是一种复杂的行为,有许多可能的设计选择)。

解决您问题的最佳方法是手动更新src模式以匹配整个依赖关系树。在你的情况下,它将是pub/**/*.pug。 (野天星**允许您匹配任何子目录中的文件。)

你也可以看一下实现your own watcher以获得更好的控制(我担心上面的模式可能会为你的部分发出HTML)。