删除文件和文件夹
您可能希望在运行构建之前删除一些文件。由于删除文件不涉及文件内容的操作,所以没有理由使用 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
的开销很大。