我正在使用 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'));
});