跳到主要内容

删除文件和文件夹

您可能希望在运行构建之前删除一些文件。由于删除文件不涉及文件内容的操作,所以没有理由使用 gulp 插件。这是使用原生 node 模块的绝佳机会。

在这个例子中,我们将使用 del 模块,因为它支持多个文件和 glob 匹配

$ npm install --save-dev gulp del

假设有以下文件结构:

.
├── dist
│ ├── report.csv
│ ├── desktop
│ └── mobile
│ ├── app.js
│ ├── deploy.json
│ └── index.html
└── src

在 gulpfile 中,我们希望在运行构建之前清空 mobile 文件夹的内容:

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

gulp.task('clean:mobile', function () {
return del([
'dist/report.csv',
// 这里我们使用 glob 匹配模式来匹配 `mobile` 文件夹内的所有内容
'dist/mobile/**/*',
// 但我们不想清理这个文件,所以我们使用否定模式
'!dist/mobile/deploy.json'
]);
});

gulp.task('default', gulp.series('clean:mobile'));

在管道中删除文件

您可能希望在管道中处理完文件后删除它们。

我们将使用 vinyl-paths 来轻松获取流中文件的路径,并将其传递给 del 方法。

$ npm install --save-dev gulp del vinyl-paths

假设有以下文件结构:

.
├── tmp
│ ├── rainbow.js
│ └── unicorn.js
└── dist
var gulp = require('gulp');
var stripDebug = require('gulp-strip-debug'); // 仅作为示例
var del = require('del');
var vinylPaths = require('vinyl-paths');

gulp.task('clean:tmp', function () {
return gulp.src('tmp/*')
.pipe(vinylPaths(del))
.pipe(stripDebug())
.pipe(gulp.dest('dist'));
});

gulp.task('default', gulp.series('clean:tmp'));

这只会删除 tmp 目录。

只在管道中已经使用其他插件的情况下这样做,否则直接使用模块,因为 gulp.src 的开销很大。