Как указать имя папки назначения zip с помощью 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);
});
Это все работает. Я получаю zip-файл в gulproot с именем filename.zip и получаю файл с именем filename-version.zip в каталоге выше. Проблема в том, что когда я распаковываю файл filename-version.zip, он извлекается в /filename-version/.
Об этом также спрашивали здесь: https://github.com/sindresorhus/gulp-zip/issues/88 и ссылались на Stack Exchange и ссылались здесь https://github.com/sindresorhus/gulp-zip/pull/35 с Рекомендуемое решение - использовать переименование, но, похоже, это на самом деле не работает.
Я считаю, что мне нужно передать параметр gulp-zip, чтобы указать место назначения zip, но я не уверен, как это сделать, или если это вообще возможно.
2 ответа
После долгих настроек я наконец-то разобрался с волшебной комбинацией.
Сначала мне нужно было создать временный каталог с нужным именем назначения. Во-вторых, мне нужно включить базу в src glob.
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('.'));