为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

缥缈止盈 2022-01-20 20:49:08
我在文件夹中有一个 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?
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超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 解压缩同一文件夹中的多个文件,以获取有关设置要在流中使用的变量的更多讨论。


查看完整回答
反对 回复 2022-01-20
  • 1 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信