使用node-archiver压缩目录解压后出现重复父压缩包如何解决
问题根因
你把输出的压缩包yayy.zip存储在了待压缩的源目录内,调用archive.directory()扫描源目录文件时,正在写入的yayy.zip会被识别为源目录下的普通文件,一同打包进压缩包。由于打包时该文件还处于写入状态,最终压缩包内的yayy.zip是不完整的无效文件。
修复方案
- 方案1:调整输出路径
最简便的解决方式是将生成的压缩包存储在待压缩源目录之外的路径,从根源上避免输出文件被扫描进待压缩文件列表。 - 方案2:添加文件过滤规则
如果业务需要必须将压缩包存储在源目录下,可以在调用directory()方法时新增过滤逻辑,跳过目标输出文件,修改后代码如下:
const archiver = require('archiver'); const fs = require('fs'); const path = require('path'); let createArchive = function(sourceDir, destDir) { const archive = archiver('zip'); const stream = fs.createWriteStream(destDir); // 提取要排除的目标压缩包文件名 const excludeFileName = path.basename(destDir); return new Promise((resolve, reject) => { archive // 第三个参数传入过滤函数,匹配到目标压缩包时跳过 .directory(sourceDir, false, (entry) => { if (entry.name === excludeFileName) { return false; } return entry; }) .on('error', err => reject(err)) .pipe(stream) ; stream.on('close', () => resolve()); archive.finalize(); }); }
内容的提问来源于stack exchange,提问作者Pawan
相关产品推荐
相关产品推荐

