使用 ArchiverJS 从 git ls-files 列表创建 Zip 存档
Creating Zip archive from git ls-files list using ArchiverJS
我正在尝试使用 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)
替换为 [**/**]
但它仍然有效(只是我的存档中有很多我不想要的文件)。
我该如何解决这个问题?
git ls 文件的输出将包含终止换行符。
然后当您在 result
上调用 split("\n")
时,您将得到一个数组,其中最后一个元素是空字符串 (""
)。
ArchiverJS 可能不喜欢将空字符串作为模式。
一个解决方案是 trim 拆分之前的字符串:
var result = stdout.trim().split("\n");
我正在尝试使用 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)
替换为 [**/**]
但它仍然有效(只是我的存档中有很多我不想要的文件)。
我该如何解决这个问题?
git ls 文件的输出将包含终止换行符。
然后当您在 result
上调用 split("\n")
时,您将得到一个数组,其中最后一个元素是空字符串 (""
)。
ArchiverJS 可能不喜欢将空字符串作为模式。
一个解决方案是 trim 拆分之前的字符串:
var result = stdout.trim().split("\n");