Я пытаюсь создать архив zip
с использованием archiverjs
, который содержит только файлы, которые будет отображаться git ls-files
, за исключением некоторых исключений.Создание zip-архива из списка git ls-files с помощью ArchiverJS
Мой код, чтобы получить имена файлов является
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)
на [**/**]
, однако он работает (только я получаю много файлов, которые не хочу в моем архиве).
Как это исправить?
блестящий. спасибо, что сработало. –
Альтернативным решением было бы отфильтровать пустые строки, так как это не нравится ArchiverJS. что-то вроде stdout.split ('\ n'). filter (function (e) {return e! == '';}); –