[英]Deleting files in a gulp task
我有一個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)
如何完成刪除端口? 有沒有更好的方法來做到這一點?
這是一個簡單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']);
});
我會使用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()
因為它返回一個promise。 它可以從任務返回,就像clean
任務一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.