删除gulp任务中的文件

时间:2016-01-27 16:17:15

标签: javascript build gulp

我有一个gulp任务,我想在其中获取一些源文件并将它们复制到build/premiumbuild/free,然后从中删除一些额外的文件 build/free

我的尝试就是这样做:

gulp.task("build", ["clean"], function () {
  gulp.src(["src/*", "!src/composer.*", "LICENSE"])
    .pipe(gulp.dest("build/premium"))
    .pipe(del(["build/free/plugins/*", "!build/free/plugins/index.php"]))
    .pipe(gulp.dest("build/free"));
});

导致错误:

TypeError: dest.on is not a function
    at DestroyableTransform.Stream.pipe (stream.js:45:8)
    at Gulp.<anonymous> (/Users/gezim/projects/myproj/gulpfile.js:9:6)

如何完成删除端口?有没有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:6)

这是一个简单的clean任务实施gulp-del

var del = require('gulp-del');

gulp.task('clean', function(){
  return del(['folderA/js', 'folderA/css', 'folderB/js']);
});

在你的情况下你可以在构建之后调用它(读作“使用构建作为依赖”):

gulp.task("build", function () {
  return gulp.src(['src/*', '!src/composer.*', 'LICENSE'])
    .pipe(gulp.dest("build/premium"))
    .pipe(gulp.dest("build/free"));
});

gulp.task("complete-build", ["build"] function(){
  return del(['build/free/plugins/*', '!build/free/plugins/index.php']);
});

然后调用“complete-build”任务来执行它。 说实话,这更像是一个“咕噜”式的问题,但与Gulp合作完成。也许在将内容写入build/free文件夹之前过滤内容的建议更多的是Gulp精神。

更新2/2018

现在已根据@gerl:

的报告将删除模块重命名为del
var del = require('del');

gulp.task('clean', function(){
  return del(['folderA/js', 'folderA/css', 'folderB/js']);
});

答案 1 :(得分:4)

我会使用gulp-filter仅删除不应从第二个目的地复制的内容。

我将任务的意图解释为希望src中存在的所有内容都出现在build/premium中。但是,build/free应排除最初位于src/plugins但仍应包含src/plugins/index.php的所有内容。

这是一个工作gulpfile:

var gulp = require("gulp");
var filter = require("gulp-filter");
var del = require("del");

gulp.task("clean", function () {
  return del("build");
});

gulp.task("build", ["clean"], function () {
  return gulp.src(["src/**", "!src/composer.*", "LICENSE"])
    .pipe(gulp.dest("build/premium"))
    .pipe(filter(["**", "!plugins/**", "plugins/index.php"]))
    .pipe(gulp.dest("build/free"));
});

传递给filter的模式是相对路径。由于gulp.src模式为src/**,因此它们与src相关。

另请注意,del无法直接传递给.pipe(),因为它会返回一个承诺。它可以从任务返回,如clean任务。