我試圖在node.js中提取一些.tar.bz2文件。我在這裏,在npm,github和谷歌搜索這個,但沒有現成的解決方案。如何使用流提取node.js中的.tar.bz2?
我的文件是25MB〜每個所以我認爲最好的辦法是與tar
模塊傳送流(類似於你如何從內置的zlib庫確定爲.tar.gz的node.js的使用gunzip解)。這樣我也可以使用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++庫在節點工作的每個平臺上都能工作。 – Benja
儘管這在技術上是正確的,但正如我在OP中說明的那樣:在實踐中,node-gyp不適用於許多Windows用戶,因爲它需要Visual Studio和其他類似Python的東西,許多常規用戶沒有安裝。在我的情況下,這是一個表演停止。 – Bartvds
不夠公平,windows上的本地libs編譯仍然是一團糟。我認爲到目前爲止最好的解決方案是爲Windows提供預編譯程序集,但大多數lib mantainers不這樣做。 – Benja