如果模板更改,则重建所有文件

时间:2016-07-19 15:41:59

标签: gulp gulp-watch

我使用gulp将markdown文件转换为HTML,并使用gulp-watch插件( gulp.watch API函数)重建文件(如果它们发生变化) 。效果很好!

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

问题是管道src是markdown文件,但在管道中我也引用了模板文件。如果该模板发生更改,则需要重建所有markdown文件。有没有办法在gulp / gulp-watch中表达这种依赖?

我尝试使用gulp.watch(API函数)来观看模板并运行' markdown'任务如果改变......

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

......但那并没有奏效。什么都没发生。我假设在管道中有gulp-watch阻止它做任何事情。

我想我可以创建两个任务,一个是gulp-watch而另一个没有,并使用一个没有强制完全重建。我宁愿不这样做,因为这使两者保持同步成为一个持续存在的问题。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

  

我想我可以创建两个任务,一个是gulp-watch而另一个没有,并使用一个没有强制完全重建。我宁愿不这样做,因为这使两者保持同步成为一个持续存在的问题。

请记住,gulp只是JavaScript。

根据您传递的参数,只需编写一个根据或不使用watch()步骤构造流的函数。 gulp-if插件让你以非常简洁的方式写出这样的东西(虽然它没有必要,没有它就可以完成)。

我将如何做到这一点:

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});
  });
});

答案 1 :(得分:0)

您也可以将gulp src指定为数组:

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