Gulp - 递归删除空文件夹

时间:2016-04-22 21:40:16

标签: gulp

我想删除给定目录中的所有文件夹和子文件夹,如果它们只包含文件夹而没有文件。有没有一种简单的方法可以做到这一点?

直到现在我才发现:

3 个答案:

答案 0 :(得分:6)

您可以使用delete-empty

gulp.task('delete-empty-directories', function() {
  deleteEmpty.sync('foo/');
});

以递归方式删除foo/下面的所有空文件夹。

答案 1 :(得分:0)

这是一个艰难的开始,所以你只需要循环进行递归我猜。

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查看是否有文件添加到流中,然后更新变量(如果是)。任务完成后,如果变量尚未更新,则会删除该文件夹。

如上所述,您可能只需循环遍历目录以进行递归(或者您可以使用其中一个已提及的插件)。

答案 2 :(得分:0)

对于带有节点v12.15 +的gulp 4

我用它来清理build文件夹,然后再生成新文件夹。

cb是gulp的回调,您可以阅读更多here

recursive: {true},如果您要递归删除文件夹

const fs = require('fs');

function cleanFolder(cb) {
  fs.rmdir('build', { recursive: true }, cb,);
}

exports.default = series(cleanFolder, parallel(YOUR_PARALLEL_TASK));