我需要将参数从另一个任务传递给gulp任务,或者用runSequence调用的函数替换任务

时间:2016-04-15 10:24:27

标签: javascript node.js gulp

我有gulp文件用于为多种考试创建Html和Js,Ex1,Ex2等

这是我用来为Ex1创建这些任务的任务。它已经硬编码了对makeEx1Html任务的调用,其他三个任务,然后是函数调用,我可以传递一个参数:

public static class InputBinder
{
    public static readonly DependencyProperty InputBindingsProperty = DependencyProperty.RegisterAttached
    (
        "InputBindings",
        typeof(InputBindingCollection),
        typeof(InputBinder),
        new FrameworkPropertyMetadata(new InputBindingCollection(), (sender, e) =>
        {

            var element = (UIElement)sender;
            if (element != null)
            {
                element.InputBindings.Clear();
                element.InputBindings.AddRange((InputBindingCollection)e.NewValue);
            }
        })
    );

    public static InputBindingCollection GetInputBindings(UIElement element)
    {
        return (InputBindingCollection)element.GetValue(InputBindingsProperty);
    }

    public static void SetInputBindings(UIElement element, InputBindingCollection inputBindings)
    {
        element.SetValue(InputBindingsProperty, inputBindings);
    }
}

以下是Ex1硬编码的任务:

gulp.task('make_prod_ex1', function () {
    runSequence(
        'makeEx1Html',
        'makeTemplate',
        'rename_bundle_css',
        'rename_bundle_js',
        function () {
            make_prod_index('ex1');
        });
});

这是我可以传递参数的函数:

gulp.task('makeEx1Html', function () {
    return gulp.src(config.srcEx1Html, { base: process.cwd() })
          .pipe(print(function (file) {
              return "Found file " + file;
          }))
          .pipe(rename({ basename: 'base' }))
          .pipe(gulp.dest('./'));

});

我希望避免像#make; makeEx1Html'这样的特定任务。和' makeEx2Html'等,但我不知道该怎么做。

请注意,所有这些任务都需要按顺序运行,这就是我使用runSequence的原因。

我将不胜感激任何建议。理想情况下,我想要使Html成为我可以传递参数的函数的任务,但我不知道如何将其纳入我的要求。

1 个答案:

答案 0 :(得分:2)

  

理想情况下,我希望使Html成为可以将参数传递给

的函数的任务

除此之外,您不仅可以将参数传递给函数,还可以在函数完成时调用回调函数cb

function makeExHtml(files, cb) {
  return gulp.src(files, { base: process.cwd() })
    .pipe(print(function (file) {
        return "Found file " + file;
    }))
    .pipe(rename({ basename: 'base' }))
    .pipe(gulp.dest('./'))
    .on('end', cb);
}

在您的gulp任务中,您可以使用上面的makeExHtml()函数并传递一个回调函数来执行runSequence()的其余部分:

gulp.task('make_prod_ex1', function () {
  makeExHtml(config.srcEx1Html, function() {
    runSequence(
      'makeTemplate',
      'rename_bundle_css',
      'rename_bundle_js',
      function () {
        make_prod_index('ex1');
    });
  });
});