node.jsでzipファイルの中身をちょっと見てみる

node.jsでzipの書庫をちょっと扱うメモ。
環境:Ubuntu 12.04 LTS 64bit / nodebrew 0.6.0 / node 0.8.1 / npm 1.1.33

標準モジュールのzlibについて

zlibって標準モジュールあったけど、それでいろいろ出来るのかなーと思ったら。
zlib.unzip in windows - not workingには
「zlibはgzipとdeflateしかサポートしてなくて、zipはサポートしてないんだ」とのこと。

zipモジュールをインストール

というわけでzip(の展開)を扱えるモジュールを探してみたら以下のスレッドにたどり着きました。
Unzip files with node.js on Windows
zipっていうそのものズバリなモジュールがあるみたい。

$ npm install zip

試してみる

// app.js
var zip = require('zip'),
    fs = require('fs'),
    data = fs.readFileSync(process.argv[2]),
    reader = zip.Reader(data);

var key,
    files = reader.toObject('utf8');

for (key in files) {
  console.log('key: %s', key);
  console.log('%s', files[key]);
}

実行時引数で受け取ったzipファイルを展開して、ファイル名とその中身を出力するコード。
このモジュール、マニュアルみたいなのがないから仕方なくソース読んだけど、他のメソッドは公開されてはいるものの、外から使うような感じではなかったので、おそらくtoObjectするのが普通の使い方なのだと思う。

$ for i in `seq 1 3`; do echo $i > $i.txt; done
$ zip file.zip *.txt
$ node app.js file.zip
key: 1.txt
1

key: 2.txt
2

key: 3.txt
3

とか、だいたいこんな感じ。一応これでzipは扱えるみたい。