Как указать имя папки назначения 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('.'));
Другие вопросы по тегам