【发布时间】:2013-07-18 21:21:57
【问题描述】:
我正在尝试在 node.js 中提取一些 .tar.bz2 文件。我在这里,在 npm,github 和谷歌搜索这个,但没有现成的解决方案。
我的文件每个约为 25mb,所以我认为最好的方法是使用 tar 模块的管道流(类似于您使用来自 node.js 的内置 ZLib 库的 Gunzip 用于 .tar.gz) .这样我也可以使用request直接从管道http中提取。
我找到了https://github.com/Woodya/node-gzbz2(还有很多像gzbz 这样重命名的分支),但它们需要使用node-gyp 构建外部依赖项。我不想使用这些,因为我正在构建的模块必须在 linux、mac 和 windows 上使用 npm 并且不依赖于 python 等外部库而无需麻烦地工作。
或者,我查看https://github.com/cscott/seek-bzip(以及它的来源),我喜欢它是纯 javascript,但它只解码缓冲区。
有人可以告诉我去这里的路吗?
编辑:seek-bzip 的作者创建了一个包装器来将他的同步流转换为异步流,但是这个修复依赖于node-fibers,它再次使用node-gyp,这在我的情况下是不可取的。见https://github.com/cscott/seek-bzip/issues/1
edit2:我仍在寻找跨平台解决方案,但这里有一个使用 CLI 命令的快速方法:
var cmd = 'bunzip2 -c ' + sourceFile + ' | (cd ' + targetDir + '; tar -xf -)';
require('child_process').exec(cmd, function (err, stdout, stderr) {
if (err) {
// bad
}
// yea!
});
【问题讨论】:
-
但是您是否尝试过使用 node-gzbz2?有没有编译错误?,node-gyp 正是为了让 c/c++ 库在 node 工作的每个平台上工作。
-
虽然这在技术上是正确的,但就像我在 OP 中所说的那样:实际上 node-gyp 不适用于许多 Windows 用户,因为它需要 Visual Studio 和其他像 python 这样的东西,许多普通用户不需要已安装。在我的情况下,这是一个表演停止者。
-
很公平,Windows 上的本地库编译仍然是一团糟。我认为目前最好的解决方案是为 windows 提供预编译的程序集,但大多数 lib mantainers 不这样做。
-
确实,虽然有npmjs.org/package/node-pre-gyp,但是很多node开发者并不关心windows。
标签: javascript node.js stream tar bzip2