Gulp-递归删除空文件夹

Gulp-递归删除空文件夹,gulp,Gulp,我想删除给定目录中的所有文件夹和子文件夹,如果它们只包含文件夹而不包含文件。有没有一个简单的方法 到目前为止,我发现: 这是一个粗略的开始,所以我想您只需要循环递归 var modules = { gulp : require('gulp'), fs : require('fs'), path : require('path'), del : require('del'), map

我想删除给定目录中的所有文件夹和子文件夹,如果它们只包含文件夹而不包含文件。有没有一个简单的方法

到目前为止,我发现:


    • 这是一个粗略的开始,所以我想您只需要循环递归

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

      如上所述,您可能只需在递归目录中循环(或者您可以使用您提到的一个插件)。

      您可以使用:


      这会递归地删除
      foo/

      下的所有空文件夹,从gulp 4开始,使用节点v12.15+,无需添加更多依赖项即可执行此操作

      在生成新文件夹之前,我使用它来清理我的
      生成/输出
      文件夹

      cb
      是对gulp的回调,您可以阅读更多关于它的信息

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

      const fs=require('fs');
      功能文件夹(cb){
      rmdir('build',{recursive:true},cb,);
      }
      exports.default=series(cleanFolder,parallel(您的并行任务));
      
      Thx。我将首先尝试“Sven Schoenung”的解决方案,因为目前我喜欢更多的依赖项,而不是更多的代码。没问题。我有心情把它写下来。让我们知道它是否适合您!:)这里的“fs”是什么?@VivekDev
      fs
      是node.js附带的文件系统api
      gulp.task('delete-empty-directories', function() {
        deleteEmpty.sync('foo/');
      });