使用gulp创建tar归档文件

3

我正在使用 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 [答案]
感谢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个回答

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处理接收到的通配符时包含哪些路径。

顺便说一下,不要忘记在任务中返回流或调用done回调函数。这有助于gulp管理您的构建流水线。

至于第二个问题,您可以使用gulp-rename任务来更改虚拟文件所在的目录。可能会是这样:

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

谢谢,但那只解决了部分问题。我已经编辑了问题以澄清我想做什么。 - yegodz
好的!看看我的更新……我想那可能会有所帮助 :-) - ddprrt
谢谢!非常好用。我正在更新我的问题,附上我正在使用的最终gulp代码……以防有人感兴趣。 - yegodz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接