2015-04-13 1 views
2

Я использую gulp-tar для создания файла tar ... как добавить папку верхнего уровня, чтобы при запуске пользователя tar -xzf myArchive.tar он извлекается в определенную папку.создание архивов tar с помощью gulp

вот мой код:

gulp.task('prod', ['min', 'gittag'], function() { 

    //copy all files under /server into a zip file 
    gulp.src('../server/**/*') 
    .pipe(tar('xoserver' + '-'+ gittag +'.tar')) 
    .pipe(gzip()) 
    .pipe(gulp.dest('../prod')); 
}); 

выше создает tar.zip файл все в порядке, но я должен быть осторожным, чтобы добавить -C <folder> при извлечении, иначе файлы будут извлечены в текущей папке.

[редактировать]

То, что я пытаюсь сделать здесь генерировать тарболл формата xoserver-alpha-d414ddf.tar.gz, который, когда экстрагируют tar xvf создаст папку xoserver-alpha-d414ddf и распаковать все файлы в ней. По сути, я пытаюсь добавить новое имя папки над мои упакованными файлами. Если добавить base вариант, папка извлекаются только server

[ОТВЕТ]

Благодаря ddprrt за хороший ответ. Я воспроизвожу окончательный код, если кто-то хочет использовать аналогичную стратегию встраивания тега git в имя tarball для распространения/тестирования.

gulp.task('gittag', function(cb) { // generate the git tag 
    git.exec({args : 'branch -v'}, function (err, stdout) { 
     var lines = stdout.split('\n'); 
     for (var l in lines) { 
     if (lines[l][0] == '*') { 
      var words = lines[l].split(/\s+/); 
      gittag = words[1]+ '-' + words[2]; 
      console.log('Gittag is %s', gittag); 
      break; 
     } 
     } 
     cb(); 
    }); 
}); 

gulp.task('min', ['runbmin', 'template', 'vendor']); // generate min files 

gulp.task('prod', ['min', 'gittag'], function() { // create tarball 
    //copy all files under /server into a zip file 
    return gulp.src('../server/**/*') 
    .pipe(rename(function(path) { 
     path.dirname = 'server-' + gittag + '/' + path.dirname; 
    })) 
    .pipe(tar('xoserver-'+gittag+'.tar')) 
    .pipe(gzip()) 
    .pipe(gulp.dest('../prod')); 
}); 

ответ

4

Это вариант base.

gulp.task('prod', ['min', 'gittag'], function() { 
    return gulp.src('../server/**/*', { base: '../server/' }) 
     .pipe(tar('xoserver' + '-'+ gittag +'.tar')) 
     .pipe(gzip()) 
     .pipe(gulp.dest('../prod')); 
}); 

С его помощью вы можете указать gulp, какие пути включать, когда имеете дело с шариками, которые вы получаете.

КПП. Не забудьте вернуть потоки или вызвать выполненный обратный вызов в своей задаче. Помогает выполнить настройку вашего трубопровода сборки

Что касается второго вопроса, вы можете использовать задачу gulp-rename, чтобы изменить каталог, в котором находятся ваши виртуальные файлы. Будет что-то вроде

.pipe(rename(function(path) { 
    path.dirname = 'whatever/' + path.dirname 
})); 
+0

Спасибо .. это только решает часть проблемы. Я отредактировал вопрос, чтобы уточнить, что я пытаюсь сделать. – user1936097

+0

хорошо! Смотрите мое обновление ... Думаю, это может помочь :-) – ddprrt

+0

Спасибо! работает как шарм. Я обновляю свой вопрос с окончательным кодом gulp, который я использую ... на всякий случай, если кто-то заинтересован – user1936097

Смежные вопросы