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

Rebuild all files if template changes

我正在使用 gulp 将降价文件转换为 HTML,并使用 gulp-watch plugin (not the 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 是降价文件,但在管道内我还引用了一个模板文件。如果该模板发生更改,则需要重建所有降价文件。有没有办法在 gulp/gulp-watch 中表达这种依赖?

我尝试使用 gulp.watch(API 函数)来观察模板和 运行 'markdown' 任务(如果它发生变化)...

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

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

我想我可以创建两个任务,一个有 gulp-watch,一个没有,然后使用一个没有强制完全重建。我宁愿不这样做,因为那样的话,保持两者同步就成了一个持续的问题。

有没有更好的方法?

可以指定gulp src为数组,到:

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

I guess I could create a two tasks, one with gulp-watch and one without, and use the one without to force a full rebuild. I'd rather not, because then it becomes an ongoing problem to keep the two in sync.

记住,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});
  });
});