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"));
});