7z-iterator

中文文档
2.2.13发布于 2026/10/12MITTypeScriptESM + CJS近 30 天下载 24.4万

使用 API 从 7z 档案中提取内容 。 纯JavaScript,工作于节点0.8+

中文使用文档
文档目录4 节
  1. 安装
  2. 提取归档
  3. 旧节点恢复API.js
  4. 限制

7z -- -- 提振器

从一个7z的档案中读取条目,其中包含一个Aync interator,承诺,调回,或可读流. 来源可以是归档路径或可读流.

安装

npm install 7z-iterator

提取归档

const SevenZipIterator = require('7z-iterator');

async function extract(archivePath, destination) {
  const iterator = new SevenZipIterator(archivePath);
  const links = [];

  try {
    for await (const entry of iterator) {
      if (entry.type === 'link') links.unshift(entry);
      else if (entry.type === 'symlink') links.push(entry);
      else await entry.create(destination, { strip: 1 });
    }

    // Create links after their target directories and files.
    for (const entry of links) await entry.create(destination, { strip: 1 });
  } finally {
    iterator.destroy();
  }
}

extract('./archive.7z', './output').catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

旧节点恢复API.js

节点.js 0.8+可以使用回调形式代替 for await数字 :

var SevenZipIterator = require('7z-iterator');
var iterator = new SevenZipIterator('./archive.7z');
var links = [];

function createLinks(index, callback) {
  if (index === links.length) return callback();
  links[index].create('./output', { strip: 1 }, function(error) {
    if (error) return callback(error);
    createLinks(index + 1, callback);
  });
}

iterator.forEach(function(entry, callback) {
  if (entry.type === 'link') { links.unshift(entry); callback(); }
  else if (entry.type === 'symlink') { links.push(entry); callback(); }
  else entry.create('./output', { strip: 1 }, callback);
}, { callbacks: true, concurrency: 1 }, function(error) {
  if (error) throw error;
  createLinks(0, function(error) {
    iterator.destroy();
    if (error) throw error;
    console.log('Extraction complete');
  });
});

entry.create(destination, options) 写入文件、目录或链接。 使用 { force: true } 以覆盖已存在的条目。 例如, 将归档密码传递给执行器构建器 new SevenZipIterator(archivePath, { password: 'secret' })。可读流源被缓冲到临时文件,因为7z解析需要随机访问.

限制

节点.js 0.8+得到支持,但更早的释放最大值较小 Buffer 尺寸。 LZMA1文件夹必须装入一个缓冲器;LZMA2可以递增流出并被选入大型档案. 在Node.js 0.8-4.x上,大于约1GB的档案无法可靠地处理.

版本与发布记录

7z-iterator 共发布 56 个版本,首次发布于 2025/12/01;过去 12 个月发布了 56 个版本。

版本发布日期距今
2.2.13latest2026/10/1224 天前
2.2.122026/09/131 个月前
2.2.112026/08/242 个月前
2.2.102026/08/242 个月前
2.2.92026/05/275 个月前
2.2.82026/05/275 个月前

关于 7z-iterator 的常见问题

7z-iterator 是什么?

使用 API 从 7z 档案中提取内容 。 纯JavaScript,工作于节点0.8+

如何安装 7z-iterator?

在项目目录运行 npm install 7z-iterator,或使用 pnpm add / yarn add / bun add。

7z-iterator 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

7z-iterator 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

7z-iterator 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=0.8。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

7z-iterator 可以商用吗?

7z-iterator 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

7z-iterator 的下载量有多少?

根据 npm 官方下载统计,7z-iterator 在 2026/10/04 – 2026/11/02 这 30 天内被下载 243,955 次,日均约 8,132 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

7z-iterator 还在维护吗?

最新版本 2.2.13 发布于 2026/10/12(24 天前);至今共发布 56 个版本,其中过去 12 个月发布了 56 个;首次发布于 2025/12/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。