fs-extraのoutputFile()とfsのwriteFile()

fs-extraパッケージのoutputFile()は出力先のディレクトリーがないと自動で作ってくれるのでちょくちょく使っている。fsモジュールのwriteFile()と互換性があり考えずに使える……と思っていたが、パス文字列の代わりにファイル演算子(やBuffer)を投げたら通らなかった。このあたりに互換性がないようだ。

fs-extraのoutputFile()では祖先ディレクトリーを作成するためにpathモジュールを使ってディレクトリー名を取り出そうとする。ここでファイル識別子(であるInteger)やBufferをそのままdirname()に投げてしまうことになり、「TypeError: Path must be a string. Recieved ...」という例外で落ちる。


出力先ファイルの親のディレクトリーがあるか確実でなく、かつ既にファイルがあった場合は処理したくない、というような実装を雑に書いたらハマった。そういうケースではoutputFile()の第三引数で{ flag: "wx" }として、上書きにだけ失敗させれば良いようだ。