Gulp - 递归删除空文件夹
答
您可以使用delete-empty
:
gulp.task('delete-empty-directories', function() {
deleteEmpty.sync('foo/');
});
此递归删除以下foo/
所有空文件夹。
答
这里有一个粗略的开始,所以你只需要循环递归我猜。
var modules = {
gulp : require('gulp'),
fs : require('fs'),
path : require('path'),
del : require('del'),
map : require('map-stream')
};
modules.gulp.task('folder-delete', function() {
// get folder list inside of the dir passed in
function getFolders(dir) {
return modules.fs.readdirSync(dir)
.filter(function(file) {
return modules.fs.statSync(modules.path.join(dir, file)).isDirectory();
});
}
var dir = '../src/', // (update with your path to the root folder)
folders = getFolders(dir),
hasFile = 0;
var folderMap = folders.map(function(folder) {
hasFile = 0; // reset for each folder
return modules.gulp.src(dir + folder + '/**/*')
.pipe(modules.map(function(file, cb) {
hasFile = 1;
cb(null, file);
}))
.on('end', function() {
console.log(hasFile, ' - ', folder);
if (!hasFile) {
modules.del([dir + folder], { force: true }).then(function() {
console.log('Deleted ' + dir + folder);
});
}
})
});
return folderMap;
});
基本上,这是设置在目录../src/,在该目录的根得到的文件夹,然后运行下这些目录中的src。然后它使用map来查看是否有文件添加到流中,然后更新变量(如果有的话)。任务完成后,如果变量尚未更新,则会删除该文件夹。如上所述,您可能只需循环遍历递归目录(或者您可以使用您提到的其中一个插件)。
Thx。我会先尝试“Sven Schoenung”的解决方案,因为我更喜欢更多的依赖项而不是更多的代码。 – Sailcomp
没问题。我有心情写出来。让我们知道它是否适合你! :) – JSess