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

我在文件夹中有一个 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?


缥缈止盈
浏览 212回答 1
1回答

一只斗牛犬

试试这个:const glob = require("glob");const zipFiles = glob.sync('sourcefiles/*.zip');gulp.task('unzip-filtered-rename', function (done) {&nbsp; zipFiles.forEach(function (zipFile) {&nbsp; &nbsp; const zipFileBase = path.parse(zipFile).name;&nbsp; &nbsp; return gulp.src(zipFile)&nbsp; &nbsp; &nbsp; &nbsp; // .pipe(debug())&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp;.pipe(plumber({&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;errorHandler: notify.onError('unzip-filtered-rename error: <%= error.message %>')&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp;}))&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp;.pipe(changed(paths.excel_targetdir_local_glob, {&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp; &nbsp;extension: '.xml'&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp;}))&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; &nbsp;.pipe(unzip({filter : function(entry){return minimatch(entry.path, "contents.xml")}}))&nbsp; &nbsp; &nbsp; &nbsp; .pipe(rename({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; basename: zipFileBase,&nbsp; &nbsp; &nbsp; &nbsp; }))&nbsp; &nbsp; &nbsp; &nbsp; .pipe(gulp.dest("./sourcefiles_unpacked")) //&nbsp; &nbsp;sourcefiles_unpacked: "./sourcefiles_unpacked/"&nbsp; &nbsp; });&nbsp; &nbsp; done();});我注释掉了您仅出于测试目的而做的其他事情。通过 forEach 或 map 运行每个文件允许您在流的开头设置一个变量,该变量将在以下流中可用。另请参阅如何使用 Gulp 解压缩同一文件夹中的多个文件,以获取有关设置要在流中使用的变量的更多讨论。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript