You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js的Archiver压缩目录时如何递归排除指定文件和目录

解决方案

你遇到的问题是glob忽略规则的写法导致的:默认不带前缀的匹配规则只会匹配cwd根目录下的对应文件/目录,要实现全层级递归排除,需要在规则前加**/前缀。同时你现有代码还有几处错误需要修正:

  • 规则里的mode_modules拼写错误,少了字母n,导致排除node_modules的规则完全不生效
  • 输出流的参数是目录__dirname,运行会报错,需要指定具体的zip文件路径
  • glob匹配模式*/**会漏掉根目录下的直接文件,改成**/*才能匹配所有层级的文件和目录

修正后的完整代码如下:

const fs = require('fs');
const archiver = require('archiver');

// 指定具体的输出压缩包路径
const output = fs.createWriteStream(__dirname + '/output.zip');
const archive = archiver('zip', { zlib: { level: 9 } });

archive.pipe(output);

archive.glob('**/*', {
   cwd: __dirname,
   // 加**/前缀实现任意层级的递归匹配
   ignore: ['**/node_modules', '**/ignored-file-name', '*.zip']
});

archive.finalize();

规则说明

  • **/是glob语法的通配符,代表匹配任意深度的子目录
  • 如果需要排除所有层级下特定后缀的文件,可以写成**/*.后缀名,例如**/*.log就会排除所有目录下的log文件
  • 如果仅需要排除特定层级的文件,可以写明确的路径规则,例如sub-folder/*.txt只会排除sub-folder目录下的txt文件,不会影响其他目录的同名文件

内容的提问来源于stack exchange,提问作者passionateLearner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:27:01