【问题标题】:Gulp - Zip the contents of subfolders & name these archives after themGulp - 压缩子文件夹的内容并以它们命名这些档案
【发布时间】:2019-01-18 02:56:50
【问题描述】:

我想使用 Gulp 和 gulp-zip 来:

  1. 压缩./lessons/文件夹的每个子文件夹
  2. 以原始文件夹名称命名每个存档。所以归档文件夹./lessons/1-hermit-crab/应该命名为1-hermit-crab.zip
  3. 将所有这些档案移至./lessons/ 文件夹中。

我已经开始这样做了,但是因为无法检索压缩目录的名称而陷入困境,因此我可以将其用作存档名称。所以我现在将档案保存在子文件夹中。

感谢您的帮助。

gulp.task('zip-lessons', function() {
    // Get an array of subdirectories under ./lessons/
    var subDirectories = glob.sync('./lessons/*/');
    // For each directory…
    subDirectories.forEach(function (subDirectory) {
        return gulp.src(subDirectory + '**')
            .pipe(zip('lesson.zip'))
            .pipe(gulp.dest(subDirectory));
    });
});

【问题讨论】:

    标签: gulp gulp-zip


    【解决方案1】:

    您可以使用节点的path 模块来获取子目录的名称,如下所示:

    const path = require('path');
    const dirName = path.parse('./folderA/folderB').base // -> 'folderB'
    

    并将 dirName 传递给 zip():

    const { task, src, dest } = require('gulp');
    const path = require('path');
    const zip = require('gulp-zip');
    const glob = require('glob');
    
    const subDirs = glob.sync('./lessons/*');
    
    task('zipLessions', (done) => {
      subDirs.forEach(subDir => {
        const dirName = path.parse(subDir).base;
        src(subDir + '/*')
          .pipe(zip(`${dirName}.zip`))
          .pipe(dest('./lessons'))
      })
      done()
    })
    

    【讨论】:

      【解决方案2】:

      我的同事为我提供了这个可行的解决方案,所以现在我正在使用它。

      const gulp = require('gulp');
      const zip = require('gulp-zip');
      
      var fs = require('fs');
      var path = require('path');
      
      // Functions
      
      function getFolders(dir) {
          return fs.readdirSync(dir)
            .filter(function(file) {
              return fs.statSync(path.join(dir, file)).isDirectory();
            });
      }
      
      // Tasks
      
      // Zip each folder in /lessons and place the archive in the /lessons root
      gulp.task('zip-lessons', () => {
          let folders = getFolders('lessons/');
          console.log(folders)
          var tasks = folders.map(function(folder) {
            gulp.src(`lessons/${folder}/**`)
              .pipe(zip(`${folder}.zip`))
              .pipe(gulp.dest('lessons'))
          })
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多