首页 > 解决方案 > 为什么在创建带有参数的任务时出现“任务不在您的 gulpfile 中”?

问题描述

我创建了一个带有参数的简单任务:

gulp.task("js", () => {
    let stream = gulp
        .src("./src/**/*.js", { base: "./src/" })
        .pipe($.plumber())
        .pipe($.changed("temp"))
        .pipe(babel());

    // minify is min argument provided
    if (args.min == true) stream = stream.pipe($.uglify());

    // Update paths
    stream
        .pipe(
            $.preprocess({
                context: {
                    PATH: save.dest,
                    COMMIT: pkg.version
                }
            })
        )
        .pipe(gulp.dest("temp"));

    return stream;
});

我想根据我是推到 QA 还是 PROD 来缩小:

gulp.task("push-dev", ["js"], function() {})

gulp.task("push-prod", ["js --min"], function() {})

但我得到了错误:

[11:51:32] 任务 'js --min' 不在您的 gulpfile 中

我正在尝试的可能吗?我试图避免为了处理不同环境中的缩小而不得不创建一个全新的任务。

标签: javascriptgulp

解决方案


与您的任务分开定义您的功能,而不是直接在您的gulp.task.

let jsFunc = (doMininfy) => {
  let stream = gulp
    .src("./src/**/*.js", { base: "./src/" })
    .pipe($.plumber())
    .pipe($.changed("temp"))
    .pipe(babel());

  // assuming you meant the parameter to go here?
  if (doMininfy) stream = stream.pipe($.uglify());

  // Update paths
  stream
    .pipe(
        $.preprocess({
            context: {
                PATH: save.dest,
                COMMIT: pkg.version
            }
        })
    )
    .pipe(gulp.dest("temp"));

  return stream;
});

gulp.task("js", () => jsFunc());
gulp.task("js-min", () => jsFunc(true));
gulp.task("push-dev", ["js"], function() {});
gulp.task("push-prod", ["js-min"], function() {});

推荐阅读