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'