我有一个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/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)
如何完成删除端口?有没有更好的方法来做到这一点?
答案 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精神。
现在已根据@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
任务。