Gulp - 用参数启动任务

时间:2016-04-15 13:34:34

标签: gulp

所以我尝试创建一个gulp工作流程,并且我想为某些任务实现选项,例如gulp copy-images --changed。现在,我已经创建了一个显然监视所有图像文件的监视任务,它应该使用--changed标志启动copy-images

理想情况下,我想做这样的事情:

gulp.task('copy-images', function(){
    // some code
});

gulp.task('watch', function(){
    gulp.watch(config.images, ['copy-images --changed']);
});

我也非常清楚我能做到:

gulp.task('copy-images', function(){
    // some code
});

gulp.task('copy-images-changed', function(){
    // some code
});

gulp.task('watch', function(){
    gulp.watch(config.images, ['copy-images']);
});

但这意味着重复的代码 任何人有解决方案或可能有一些建议?

提前致谢!

1 个答案:

答案 0 :(得分:2)

Gulp没有提供指定任务选项的内置方法。您必须使用外部选项解析器模块,如yargs。有关该主题的更多信息,请参阅this question

这也意味着将['copy-images --changed']之类的内容传递给gulp.watch()将无效。整个字符串只会被解释为任务名称。

最好的方法是将任务代码分解为函数,然后从任务和手表中调用此函数:

var argv = require('yargs').argv;

function copyImages(opts) {
  if (opts.changed) {
    // some code
  } else {
    // some other code
  }
}

gulp.task('copy-images', function() {
  copyImages(argv);
});

gulp.task('watch', function(){
    gulp.watch(config.images, function() {
      copyImages({changed:true});
    });
});

上述内容应涵盖所有基础:

  • gulp copy-images将执行//some other code
  • gulp copy-images --changed将执行//some code
  • gulp watch会在观看文件发生更改时执行//some code