Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在“吞咽”任务中删除文件_Javascript_Build_Gulp - Fatal编程技术网

Javascript 在“吞咽”任务中删除文件

Javascript 在“吞咽”任务中删除文件,javascript,build,gulp,Javascript,Build,Gulp,我有一个吞咽任务,在这个任务中,我想获取一些源文件并将它们复制到build/premium和build/free,然后从中删除一些额外的文件 build/free 我的尝试是这样做的: gulp.task("build", ["clean"], function () { gulp.src(["src/*", "!src/composer.*", "LICENSE"]) .pipe(gulp.dest("build/premium")) .pipe(del(["build/f

我有一个吞咽任务,在这个任务中,我想获取一些源文件并将它们复制到
build/premium
build/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)
TypeError:dest.on不是函数
位于DestroyableTransform.Stream.pipe(Stream.js:45:8)
狼吞虎咽。(/Users/gezim/projects/myproj/gulpfile.js:9:6)

如何在删除端口完成此操作?有更好的方法吗?

这是一个简单的
清理
任务实现,使用
gulpdel

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

gulp.task('clean', function(){
  return del(['folderA/js', 'folderA/css', 'folderB/js']);
});
在您的情况下,您可以在构建之后调用它(阅读“使用构建作为依赖项”):

然后调用“完成构建”任务来执行它。 老实说,这更像是一种“咕噜”式的解决问题的方法,不过是通过吞咽来完成的。也许在将内容写入
build/free
文件夹之前过滤这些内容的建议更符合吞咽的精神

更新日期:2018年2月 @gerl报告,删除模块已重命名为
del

var del = require('del');

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

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

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

这是一个正在工作的海湾文件:

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()
,因为它返回一个承诺。它可以从任务返回,就像清理任务一样。

我不知道这里的操作顺序。其目的似乎是删除尚未复制的文件(
.pipe(del(..)
)(
.pipe(gulp.dest(“build/free”))
)。是否有理由将
del
放在复制到
build/free
pipe
之前?@Louis我在复制后将其删除,但这也不起作用。我想我是想从管道中删除,这在事后看来毫无意义。我只想在将内容复制到管道中后从
build/free
中删除内容。使用
clean
可以使它在
build
运行之前运行。我已经更新了代码以满足您的需要。也许最好使用主动过滤器,而不是编写和删除。现在是
require('del')
非常感谢。这真是恰到好处。
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"));
});