使用ArchiverJS从git ls-files列表创buildZip存档
我正在尝试使用archiverjs
创build一个zip
存档,其中仅包含git ls-files
将显示git ls-files
,less一些排除。
我的代码来获取文件名是
var listFiles = function() { var promise = new Promise(function (resolve, reject) { var exec = require('child_process').exec; var child; child = exec("cd ..; git ls-files", function (error, stdout, stderr) { if (error !== null) { return reject(error) } var result = stdout.split("\n"); resolve(result); }); }); return promise; };
然后我的实际捆绑function看起来像
DeploymentUtil.prototype.CreateApplicationVersionBundle = function (pathToApplication, versionLabel, target) { var promise = new Promise(function (resolve, reject) { // Create the archive var output = fs.createWriteStream(versionLabel + ".zip"); output.on('close', function () { resolve(output); }); var archive = archiver.create("zip"); // Error handling archive.on('error', function (err) { reject(err); }); // get the files from git listFiles().then(function(files) { var exclusions = [ '!**/.keep', '!.codeclimate.yml', '!.csslintrc', '!.travis.yml', '!env_sample', '!spec/**' ]; for(var i = 0, l = 9; i < l; i++ ) { console.log(files[i]); } archive.bulk([{ expand: true, cwd: pathToApplication, src: files.concat(exclusions), dot: true }]); archive.pipe(output); archive.finalize(); }).catch(reject); }); return promise; }
运行这个archive.bulk
会抛出一个错误: must provide pattern
。
如果我用[**/**]
replacesrc: files.concat(exclusions)
,但是它工作(只有我得到了我不想在我的档案中的很多文件)。
我怎样才能解决这个问题?
git ls-files的输出将包含一个终止的换行符。
当你对result
调用split("\n")
时,你会得到一个数组,最后一个元素是空string( ""
)。
ArchiverJS可能不会将空string作为模式。
一个解决scheme是在分割之前修剪string:
var result = stdout.trim().split("\n");