7z-iterator

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

Extract contents from 7z archives using an iterator API. Pure JavaScript, works on Node.js 0.8+

原始使用文档
文档目录4 节
  1. Install
  2. Extract an archive
  3. Callback API for older Node.js
  4. Limitations

7z-iterator

Read entries from a 7z archive with an async iterator, promises, callbacks, or a readable stream. Sources can be archive paths or readable streams.

Install

npm install 7z-iterator

Extract an archive

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;
});

Callback API for older Node.js

Node.js 0.8+ can use the callback form instead of 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) writes a file, directory, or link. Use { force: true } to overwrite existing entries. Pass an archive password to the iterator constructor, for example new SevenZipIterator(archivePath, { password: 'secret' }). A readable stream source is buffered to a temporary file because 7z parsing needs random access.

Limitations

Node.js 0.8+ is supported, but older releases have smaller maximum Buffer sizes. LZMA1 folders must fit in one buffer; LZMA2 can stream incrementally and is preferred for large archives. On Node.js 0.8-4.x, archives larger than about 1 GB cannot be processed reliably.

版本与发布记录

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 是什么?

Extract contents from 7z archives using an iterator API. Pure JavaScript, works on Node.js 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 和提交记录判断。