使用gulp创建tar档案

时间:2015-04-13 21:18:47

标签: gulp tar

我正在使用gulp-tar创建tar文件...如何添加顶级文件夹,以便在用户运行tar -xzf myArchive.tar时将其提取到特定文件夹中。

这是我的代码:

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的tarball,当使用tar xvf提取时,会创建一个文件夹xoserver-alpha-d414ddf并解压缩其下的所有文件。基本上我试图在我的打包文件上面添加新的文件夹名称。 如果我添加base选项,则提取的文件夹只是server

[ANSWER]

感谢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'));
});

1 个答案:

答案 0 :(得分: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
}));