如何使用 gulp-zip 指定 zip 目标文件夹名称
How to specify zip destination folder name using gulp-zip
我正在尝试使用 gulp-zip 构建一个包含版本号的 zip 文件,但在解压缩时解压缩到一个没有版本号的文件夹。
如果我通常压缩一个文件夹,然后重命名,然后解压缩,文件被提取到原始文件夹名称,我假设是因为设置了目标参数。如果我使用 gulp-zip 执行相同操作(先将其压缩,然后使用版本号重命名),则会提取到具有版本号的文件夹。
var packageJSON = require('./package.json');
var fileName = packageJSON.name;
var fileVersion = packageJSON.version;
var zip = require('gulp-zip');
var rename = require('gulp-rename');
var buildTemp = './temp-build/';
var buildInclude = [ '**/*', '!package*.json', '!node_modules/' ];
gulp.task('buildZip', function () {
return gulp.src(buildTemp + '/**/')
.pipe(zip(fileName + '.zip'))
.pipe(gulp.dest('./'))
.pipe(notify({message: 'Zip task complete', onLast: true}));
});
gulp.task('renameZip', function () {
return gulp.src(fileName + '.zip')
.pipe(rename(fileName + '-' + fileVersion + '.zip'))
.pipe(gulp.dest('.././'))
.pipe(notify({message: 'Zip renamed and moved up', onLast: true}));
});
gulp.task('build', function (cb) {
runSequence('buildZip', 'renameZip', cb);
});
一切正常。我在 gulproot 中得到一个名为 filename.zip 的 zip 文件,并且在上面的目录中得到一个名为 filename-version.zip 的文件。问题是当我解压缩 filename-version.zip 时,它会提取到 /filename-version/.
这里也有人问过这个问题:https://github.com/sindresorhus/gulp-zip/issues/88 and referred to Stack Exchange and referenced here https://github.com/sindresorhus/gulp-zip/pull/35 推荐的解决方案是使用重命名,但这似乎实际上不起作用。
我认为我需要将一个选项传递给 gulp-zip 以指定 zip 目的地,但我不清楚该怎么做,或者是否可能。
折腾了好久终于整理出魔法组合
首先我需要用我想要的目标名称创建一个临时目录。其次,我需要在 src glob 中包含 base。
var packageJSON = require('./package.json');
var fileName = packageJSON.name;
var fileVersion = packageJSON.version;
var zip = require('gulp-zip');
var rename = require('gulp-rename');
var buildTemp = fileName;
var buildInclude = [ '**/*', '!package*.json', '!node_modules/' ];
gulp.task('buildZip', function () {
return gulp.src(buildTemp + '/**/', {base: './'})
.pipe(zip(fileName + '.zip'))
.pipe(gulp.dest('./'))
.pipe(notify({message: 'Zip task complete', onLast: true}));
});
gulp.task('renameZip', function () {
return gulp.src(fileName + '.zip')
.pipe(rename(fileName + '-' + fileVersion + '.zip'))
.pipe(gulp.dest('.././'))
.pipe(notify({message: 'Zip renamed and moved up', onLast: true}));
});
gulp.task('build', function (cb) {
runSequence('buildZip', 'renameZip', cb);
});
更直接的方法:
gulp.src(distDir + '/**', {base: distDir})
.pipe(rename(function(file) {
file.dirname = projectName + '/' + file.dirname;
}))
.pipe(zip(projectName + '-' + version +'.zip'))
.pipe(gulp.dest('.'));
我正在尝试使用 gulp-zip 构建一个包含版本号的 zip 文件,但在解压缩时解压缩到一个没有版本号的文件夹。
如果我通常压缩一个文件夹,然后重命名,然后解压缩,文件被提取到原始文件夹名称,我假设是因为设置了目标参数。如果我使用 gulp-zip 执行相同操作(先将其压缩,然后使用版本号重命名),则会提取到具有版本号的文件夹。
var packageJSON = require('./package.json');
var fileName = packageJSON.name;
var fileVersion = packageJSON.version;
var zip = require('gulp-zip');
var rename = require('gulp-rename');
var buildTemp = './temp-build/';
var buildInclude = [ '**/*', '!package*.json', '!node_modules/' ];
gulp.task('buildZip', function () {
return gulp.src(buildTemp + '/**/')
.pipe(zip(fileName + '.zip'))
.pipe(gulp.dest('./'))
.pipe(notify({message: 'Zip task complete', onLast: true}));
});
gulp.task('renameZip', function () {
return gulp.src(fileName + '.zip')
.pipe(rename(fileName + '-' + fileVersion + '.zip'))
.pipe(gulp.dest('.././'))
.pipe(notify({message: 'Zip renamed and moved up', onLast: true}));
});
gulp.task('build', function (cb) {
runSequence('buildZip', 'renameZip', cb);
});
一切正常。我在 gulproot 中得到一个名为 filename.zip 的 zip 文件,并且在上面的目录中得到一个名为 filename-version.zip 的文件。问题是当我解压缩 filename-version.zip 时,它会提取到 /filename-version/.
这里也有人问过这个问题:https://github.com/sindresorhus/gulp-zip/issues/88 and referred to Stack Exchange and referenced here https://github.com/sindresorhus/gulp-zip/pull/35 推荐的解决方案是使用重命名,但这似乎实际上不起作用。
我认为我需要将一个选项传递给 gulp-zip 以指定 zip 目的地,但我不清楚该怎么做,或者是否可能。
折腾了好久终于整理出魔法组合
首先我需要用我想要的目标名称创建一个临时目录。其次,我需要在 src glob 中包含 base。
var packageJSON = require('./package.json');
var fileName = packageJSON.name;
var fileVersion = packageJSON.version;
var zip = require('gulp-zip');
var rename = require('gulp-rename');
var buildTemp = fileName;
var buildInclude = [ '**/*', '!package*.json', '!node_modules/' ];
gulp.task('buildZip', function () {
return gulp.src(buildTemp + '/**/', {base: './'})
.pipe(zip(fileName + '.zip'))
.pipe(gulp.dest('./'))
.pipe(notify({message: 'Zip task complete', onLast: true}));
});
gulp.task('renameZip', function () {
return gulp.src(fileName + '.zip')
.pipe(rename(fileName + '-' + fileVersion + '.zip'))
.pipe(gulp.dest('.././'))
.pipe(notify({message: 'Zip renamed and moved up', onLast: true}));
});
gulp.task('build', function (cb) {
runSequence('buildZip', 'renameZip', cb);
});
更直接的方法:
gulp.src(distDir + '/**', {base: distDir})
.pipe(rename(function(file) {
file.dirname = projectName + '/' + file.dirname;
}))
.pipe(zip(projectName + '-' + version +'.zip'))
.pipe(gulp.dest('.'));