1

我在文件夹中有一个 zip 文件,我想提取其中一个(压缩的)文件并source file basename + .xml在文件夹中给它一个文件名模式./sourcefiles_unpacked/

./sourcefiles/test.zip

=>

./sourcefiles/test.zip
./sourcefiles_unpacked/test.xml

解压缩和过滤与 gulp-unzip 配合得很好,但是我不确定如何从 gulp.src 调用中访问文件名。

gulp.task('unzip-filtered-rename', function() {
  return gulp.src(paths.unzip_sourcefiles)
    // .pipe(debug())
    .pipe(plumber({
      errorHandler: notify.onError('unzip-filtered-rename error: <%= error.message %>')
    }))
    .pipe(changed(paths.excel_targetdir_local_glob, {
      extension: '.xml'
    }))
    .pipe(unzip({filter : function(entry){return minimatch(entry.path, "contents.xml")}}))
    .pipe(gulp.rename(function(path){       

        // ? What do I put here to rename each target file to 
        // ?   its originating zip file's basename?


    })) //   "==> test.xml",
    .pipe(gulp.dest(paths.sourcefiles_unpacked)) //   sourcefiles_unpacked: "./sourcefiles_unpacked/"
});

一旦 gulp.rename() 被调用,块就被重命名为它在 zipfile 中的名称。

  • 如何访问或存储早期管道的文件路径以用于重命名函数调用?
  • 如果路径包含 glob“./sourcefiles_unpacked/”,是否正确配置了 gulp.dest?
4

1 回答 1

2

尝试这个:

const glob = require("glob");
const zipFiles = glob.sync('sourcefiles/*.zip');

gulp.task('unzip-filtered-rename', function (done) {

  zipFiles.forEach(function (zipFile) {

    const zipFileBase = path.parse(zipFile).name;

    return gulp.src(zipFile)
        // .pipe(debug())
        //   .pipe(plumber({
        //     errorHandler: notify.onError('unzip-filtered-rename error: <%= error.message %>')
        //   }))
        //   .pipe(changed(paths.excel_targetdir_local_glob, {
        //     extension: '.xml'
        //   }))
        //   .pipe(unzip({filter : function(entry){return minimatch(entry.path, "contents.xml")}}))
        .pipe(rename({
            basename: zipFileBase,
        }))
        .pipe(gulp.dest("./sourcefiles_unpacked")) //   sourcefiles_unpacked: "./sourcefiles_unpacked/"
    });
    done();
});

我注释掉了您仅出于测试目的而做的其他事情。通过 forEach 或 map 运行每个文件允许您在流的开头设置一个变量,该变量将在以下流中可用。

另请参阅如何使用 Gulp 解压缩同一文件夹中的多个文件,以获取有关设置要在流中使用的变量的更多讨论。

于 2019-12-06T14:39:50.573 回答