1. 使用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');
  1. 使用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');
  1. 使用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

nodejs archiver压缩目录到指定位置的多种方式和推荐库dome

原文地址: http://www.cveoy.top/t/topic/fmm0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录