我正在尝试在node.js中提取一些.tar.bz2文件。我在npm、github和谷歌上搜索,但没有现成的解决方案。
我的文件每个约25mb,所以我认为最好的方法是使用“tar”模块中的管道流(类似于您如何使用来自node.js内置ZLib库的Gunzip进行.tar.gz)。这样,我还可以直接从管道http使用“request”进行提取。
我发现https://github.com/Woodya/node-gzbz2(及其许多重命名的分支,如“gzbz”),但它们需要使用“node-gyp”构建的外部依赖项。我不想使用这些,因为我正在构建的模块必须在linux、mac和windows上无需麻烦地使用npm,并且不依赖于外部库,如python。
作为替代,我看了https://github.com/cscott/seek-bzip(及其源代码),我喜欢它是纯javascript的,但它只解码缓冲区。
我的文件每个约25mb,所以我认为最好的方法是使用“tar”模块中的管道流(类似于您如何使用来自node.js内置ZLib库的Gunzip进行.tar.gz)。这样,我还可以直接从管道http使用“request”进行提取。
我发现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-fibers
又使用 node-gyp
,在我的情况下这是不可取的。请参见https://github.com/cscott/seek-bzip/issues/1
编辑2:我仍在寻找跨平台解决方案,但这里有一种使用 CLI 命令快速解决的方法:
var cmd = 'bunzip2 -c ' + sourceFile + ' | (cd ' + targetDir + '; tar -xf -)';
require('child_process').exec(cmd, function (err, stdout, stderr) {
if (err) {
// bad
}
// yea!
});