删除gulp任务中的文件

Gez*_*zim 4 javascript build 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"));
});
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*coL 9

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

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

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

在您的情况下,您可以在构建后调用它(读取"使用构建作为依赖项"):

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']);
});
Run Code Online (Sandbox Code Playgroud)

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

更新2/2018

根据del@gerl的报告,删除模块已重命名为:

var del = require('del');

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


Lou*_*uis 5

我只会gulp-filter丢弃不应从第二个目标复制的内容。

我将任务的意图解释为希望其中的所有内容都存在于srcbuild/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"));
});
Run Code Online (Sandbox Code Playgroud)

传递给的模式filter相对路径。由于gulp.src模式具有src/**它意味着它们相对于src

还请注意,del它不能直接传递给.pipe()它,因为它会返回一个承诺。它可以像clean任务一样从任务中返回。