nodejs archiver压缩目录到指定位置的多种方式和推荐库dome
- 使用fs模块和zlib模块自行实现压缩:
const fs = require('fs');
const zlib = require('zlib');
const archive = (source, target) => {
const output = fs.createWriteStream(target);
const archive = zlib.createGzip();
output.on('close', () => {
console.log(`压缩完成,共压缩了${archive.bytesRead}个字节`);
});
archive.on('error', (err) => {
throw err;
});
fs.readdir(source, (err, files) => {
if (err) {
throw err;
}
files.forEach((file) => {
const input = fs.createReadStream(`${source}/${file}`);
input.on('error', (err) => {
throw err;
});
archive.pipe(output);
archive.append(input);
});
archive.finalize();
});
};
archive('/path/to/source', '/path/to/target');
- 使用node-tar库:
const tar = require('tar');
const archive = (source, target) => {
tar.c(
{
gzip: true,
file: target,
},
[source]
).then(() => {
console.log('压缩完成');
});
};
archive('/path/to/source', '/path/to/target');
- 使用archiver库:
const archiver = require('archiver');
const fs = require('fs');
const archive = (source, target) => {
const output = fs.createWriteStream(target);
const archive = archiver('zip', {
zlib: { level: 9 },
});
output.on('close', () => {
console.log(`压缩完成,共压缩了${archive.pointer()}个字节`);
});
archive.on('error', (err) => {
throw err;
});
archive.pipe(output);
archive.directory(source, false);
archive.finalize();
};
archive('/path/to/source', '/path/to/target');
推荐使用archiver库,因为它比较易用且功能比较全面,支持多种压缩格式,并提供了丰富的API
原文地址: http://www.cveoy.top/t/topic/fmm0 著作权归作者所有。请勿转载和采集!