Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gulp 如果模板更改,则重新生成所有文件_Gulp_Gulp Watch - Fatal编程技术网

Gulp 如果模板更改,则重新生成所有文件

Gulp 如果模板更改,则重新生成所有文件,gulp,gulp-watch,Gulp,Gulp Watch,我使用gulp将标记文件转换为HTML,并使用插件(notAPI函数)在文件更改时重建文件。很好 gulp.task('markdown',function(){ gulp.src('src/***.md') .pipe(监视('src/***/.md')) .pipe(标记()) .pipe(模板('templates/md.tpl')) .pipe(大口目的地('dist')); }); 问题是管道src是标记文件,但在管道中我也引用了一个模板文件。如果该模板发生更改,则需要重新生成所有标

我使用gulp将标记文件转换为HTML,并使用插件(notAPI函数)在文件更改时重建文件。很好

gulp.task('markdown',function(){
gulp.src('src/***.md')
.pipe(监视('src/***/.md'))
.pipe(标记())
.pipe(模板('templates/md.tpl'))
.pipe(大口目的地('dist'));
});
问题是管道
src
是标记文件,但在管道中我也引用了一个模板文件。如果该模板发生更改,则需要重新生成所有标记文件。有没有一种方法可以表达这种依赖性

我尝试使用gulp.watch(API函数)查看模板,如果模板发生变化,则运行“降价”任务

gulp.watch('templates/md.tpl',['markdown']);
。。。但那没用。什么也没发生。我想在管道中安装一块大块头手表可以防止它做任何事情

我想我可以创建两个任务,一个带gulp watch,一个不带,然后使用一个不带的任务强制进行全面重建。我宁愿不要,因为那样的话,保持两者的同步就成了一个持续的问题


有更好的方法吗?

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

gulp.src(['src/**/*.md', 'templates/md.tpl'])
我想我可以创建两个任务,一个带gulp watch,一个不带,然后使用一个不带的任务强制进行全面重建。我宁愿不要,因为那样的话,保持两者的同步就成了一个持续的问题

记住,gulp只是JavaScript

只需编写一个函数,根据您传递的参数,使用或不使用
watch()
步骤来构造流。这个插件让你可以用一种非常简洁的方式编写类似的东西(尽管它不是必需的,也可以不用它)

我会这样做:

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

我知道可以使用多个通配符来
src
,但我不确定这有什么帮助。更改模板将如何强制所有标记文件重新生成?我不也会在管道中使用模板文件吗?我不想在降价管道中处理模板本身。