Gulp 重复

Duplication in Gulp

这个重复不可能是正确的。你应该如何使用 Gulp 来做到这一点?

gulp.task("default", function() {
  gulp.src("src/**/*.cjsx")
    .pipe(cjsx({bare: true}).on("error", gutil.log))
    .pipe(sourcemaps.init())
    .pipe(transpile({
      formatter: "bundle"
    }))
    .pipe(sourcemaps.write("./"))
    .pipe(gulp.dest("public"));

  gulp.src("src/**/*.js")
    .pipe(sourcemaps.init())
    .pipe(transpile({
      formatter: "bundle"
    }))
    .pipe(sourcemaps.write("./"))
    .pipe(gulp.dest("public"));
});

我建议您将这个任务分成两个任务,一个是编译它们旁边的 cjsx 文件 (gulp.dest("src/")),另一个是转译所有的 js 文件。如果您也愿意,可以让 js 任务依赖于 cjsx,或者仅 运行 按顺序通过 cjsx。

gulp.task('cjsx', ....);
gulp.task('js', 'cjsx', ....);

例如

gulp.task("cjsx", function() {
  gulp.src("src/**/*.cjsx")
    .pipe(cjsx({bare: true}).on("error", gutil.log))
    .pipe(gulp.dest("src"));
});

gulp.task("js", "cjsx", function () {
  gulp.src("src/**/*.js")
    .pipe(sourcemaps.init())
    .pipe(transpile({
      formatter: "bundle"
    }))
    .pipe(sourcemaps.write("./"))
    .pipe(gulp.dest("public"));
});

gulp.task("default", "js");

您可以使用 gulp-if.

它可以像这样

gulp.task("default", function() {
  gulp.src("src/**/*.{cjsx,js}") // Gets both .cjsx and .js files

    .pipe(gulpif(/[.]cjsx$/, cjsx({bare: true}).on("error", gutil.log))) // Do this only if file is a .cjsx

    .pipe(sourcemaps.init())
    .pipe(transpile({
      formatter: "bundle"
    }))
    .pipe(sourcemaps.write("./"))
    .pipe(gulp.dest("public"));
});