kidoOooOoooOOom

IT系で開発やってます

nodeでファイルの拡張子を厳格に指定して読み込み

nodeのプロジェクトで、/lib/service/index.js などのファイルから、同ディレクトリ配下のjsファイルを一括してexportsさせるケースがある。例えば下記のようなコード。

var fs = require('fs');
var path = require('path');
var _ = require('lodash');

_.forEach(_.filter(fs.readdirSync(__dirname), function (name) {
  return ('index.js' !== name);
}), function (name) {
  var basename = path.basename(name, suffix);
  exports[basename] = require('./' + basename);
});

これでうまく動いていたが、ある日突然nodeが死亡するケースが起きた。
原因を調べてみると、この index.jsのexports処理で不正なファイルを読み込もうとして落ちていた。
この不正なファイルというのが、「hoge.js.swp」といった vim でファイルを開いた時に自動で作られるswapファイルだった。

というわけで、余計なファイルを読み込まないように pathモジュールのextname()関数を用いて厳格にファイル拡張子を指定すれば問題なくなった。

path.extname(filename) === .'js'

http://nodejs.org/api/path.html#path_path_extname_p