【问题标题】:Rebuild all files if template changes如果模板更改,则重建所有文件
【发布时间】:2016-07-20 02:20:16
【问题描述】:

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

我尝试使用 gulp.watch(API 函数)来观察模板并在它发生变化时运行“markdown”任务...

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

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

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

有没有更好的办法?

【问题讨论】:

    标签: gulp gulp-watch


    【解决方案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});
      });
    });
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我知道src 可以使用多个通配符,但我不确定这有什么帮助。更改模板将如何强制所有降价文件重新构建?难道我也不会在管道中得到模板文件吗?我不想在降价管道中处理模板本身。
      猜你喜欢
      • 1970-01-01
      • 2017-10-16
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多