fs-extraパッケージのoutputFile()
は出力先のディレクトリーがないと自動で作ってくれるのでちょくちょく使っている。fsモジュールのwriteFile()
と互換性があり考えずに使える……と思っていたが、パス文字列の代わりにファイル演算子(やBuffer)を投げたら通らなかった。このあたりに互換性がないようだ。
fs-extraのoutputFile()
では祖先ディレクトリーを作成するためにpathモジュールを使ってディレクトリー名を取り出そうとする。ここでファイル識別子(であるInteger)やBufferをそのままdirname()
に投げてしまうことになり、「TypeError: Path must be a string. Recieved ...」という例外で落ちる。
出力先ファイルの親のディレクトリーがあるか確実でなく、かつ既にファイルがあった場合は処理したくない、というような実装を雑に書いたらハマった。そういうケースではoutputFile()
の第三引数で{ flag: "wx" }
として、上書きにだけ失敗させれば良いようだ。