我正在尝试使用archiverjs
创建一个zip
存档,该存档仅包含git ls-files
将显示的文件,而不包含一些排除项。
获取文件名的代码是
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;
};
然后我的实际捆绑功能看起来像
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
。
如果我将src: files.concat(exclusions)
替换为[**/**]
但是它可以正常工作(只有我在档案中收到了很多我不想要的文件)。
我该如何解决这个问题?
答案 0 :(得分:1)
git ls-files的输出将包含一个终止换行符。
当您在split("\n")
上调用result
时,您将获得一个数组,其中最后一个元素是空字符串(""
)。
ArchiverJS可能不喜欢空字符串作为模式。
一种解决方法是在分割之前修剪弦:
var result = stdout.trim().split("\n");