我正在尝试使用只包含zip显示的文件的archiverjs来创建一个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)替换[**/**],它就能工作(只是我在存档中得到了很多不想要的文件)。
我怎么才能解决这个问题?
发布于 2016-05-16 02:58:56
git ls-file的输出将包含一个终止的换行符。
然后,当在split("\n")上调用result时,您将得到一个数组,其中最后一个元素是空字符串("")。
ArchiverJS可能不喜欢空字符串作为模式。
一种解决方案是在拆分字符串之前修剪它:
var result = stdout.trim().split("\n");
https://stackoverflow.com/questions/37245942
复制相似问题