在 gulp.rename() 调用中使用之前 gulp.src 的文件名
Use filename from earlier gulp.src in gulp.rename() call
我在文件夹中有一个 zip 文件,我想提取其中一个(压缩的)文件并在文件夹 ./sourcefiles_unpacked/
中为其指定一个文件名模式 source file basename + .xml
./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() 被调用,块就被重命名为它在 zip 文件中的名称。
- 如何访问或存储早期管道的文件路径以用于重命名函数调用?
- 如果路径包含 glob“./sourcefiles_unpacked/”,gulp.dest 是否正确配置?
试试这个:
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 或映射的每个文件允许您在流外部的开头设置一个变量,该变量将在以下流中可用。
有关设置要在流中使用的变量的更多讨论,另请参阅 。
我在文件夹中有一个 zip 文件,我想提取其中一个(压缩的)文件并在文件夹 ./sourcefiles_unpacked/
source file basename + .xml
./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() 被调用,块就被重命名为它在 zip 文件中的名称。
- 如何访问或存储早期管道的文件路径以用于重命名函数调用?
- 如果路径包含 glob“./sourcefiles_unpacked/”,gulp.dest 是否正确配置?
试试这个:
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 或映射的每个文件允许您在流外部的开头设置一个变量,该变量将在以下流中可用。
有关设置要在流中使用的变量的更多讨论,另请参阅