在gulp.rename()调用中使用早期gulp.pipe中的文件名

问题描述 投票:0回答:1

我在一个文件夹中有一个zip文件,我想解压缩其中的一个文件(压缩文件),并在文件夹'./sourcefiles_unpacked/'中给它一个文件名模式'源文件基本名'+'.xml'。

./sourcefiles/test.zip

=>

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

解压缩和过滤与gulp-unzip很好地兼容,但是:我不确定如何从两个管道访问文件名。

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是否正确配置?
javascript gulp pipe gulp-rename
1个回答
0
投票

尝试一下:

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运行每个文件,使您可以在流之外的开头设置变量,该变量将在以下流中可用。

另请参见How to unzip multiple files in the same folder with Gulp,以获取有关设置要在流中使用的变量的更多讨论。

© www.soinside.com 2019 - 2024. All rights reserved.