He escrito a continuación para comprimir un directorio:
const archiver = require('archiver'); let createArchive = function(sourceDir, destDir) { const archive = archiver('zip'); const stream = fs.createWriteStream(destDir); return new Promise((resolve, reject) => { archive .directory(sourceDir, false) .on('error', err => reject(err)) .pipe(stream) ; stream.on('close', () => resolve()); archive.finalize(); }); }Antes de comprimir mi directorio se veía así:
Cuando descomprimí el archivo (llamado yayy.zip ) tenía estos archivos:
Hay un archivo no válido llamado yayy.zip dentro. ¿Cómo puedo evitar esto?
En lugar de directory , puede usar el método glob para especificar los archivos para comprimir. Se necesita un segundo argumento donde puede especificar archivos para ignorar.
const archiver = require('archiver'); let createArchive = function(sourceDir, destDir) { const archive = archiver('zip'); const stream = fs.createWriteStream(destDir); return new Promise((resolve, reject) => { archive .on('error', err => reject(err)) .pipe(stream) .glob( '**/*', {cwd: sourceDir, ignore: filename} ) ; stream.on('close', () => resolve()); archive.finalize(); }); }