gist

2012年5月16日水曜日

finditを試してみた

finditは、ディレクトリを再帰的に探索できるパッケージです。

$ npm install findit

CoffeeScriptで書いてみます。

findit = require 'findit'

finder = findit.find('..')

finder.on 'directory', (dir, stat)->
 console.log dir + '/'

finder.on 'file', (file, stat)->
 console.log 'File: ' + file

finder.on 'link', (link, stat)->
 console.log 'Link: ' + link

findメソッドで、対象ディレクトリを指定します。EventEmitterのonメソッドでdirectory, file, link毎に処理を書けます。

実行してみます。expressでファイルを増やしています。

$ express .
$ coffee sample.coffee
File: ./app.js
File: ./package.json
./public/
./public/images/
./public/javascripts/
./public/stylesheets/
File: ./public/stylesheets/style.css
./routes/
File: ./routes/index.js
File: ./sample.coffee
./views/
File: ./views/index.jade
File: ./views/layout.jade

あまりにファイル数が多いディレクトリを指定すると、コールスタックがサイズオーバーして落ちる場合があります。

/Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:76
        f.apply(cb, context.stack);
          ^
RangeError: Maximum call stack size exceeded
    at Function.APPLY_OVERFLOW (native)
    at action (/Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:76:11)
    at next (/Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:208:17)
    at /Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:213:30
    at /Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:55:24
    at Function.<anonymous> (/Users/inouetomoyuki/node_modules/findit/index.js:75:25)
    at Function.<anonymous> (/Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:210:38)
    at action (/Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:76:11)
    at next (/Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:208:17)
    at /Users/inouetomoyuki/node_modules/findit/node_modules/seq/index.js:213:30

依存モジュールのseqから発火されています。未解決のようです。node 0.7.8(Win版)ではhack方法が紹介されています。

0 件のコメント: