Nodeを書いていて、ディレクトリを削除したいときがあるかもしれません。例:ビルド前にディレクトリクリーン。
そんなときに使えるのがrimrafというパッケージ。
Unixコマンドのrm -rfと同じ挙動が実現できます。
でも、Nodeの標準パッケージにfsというものもあります。そのfsにもrmdirっていうメソッドを発見したので、両者の違いについて軽く調べました。
違い
結論から言うと、fsのrmdirメソッドは空のディレクトリしか消せないようです。
検証
コードを書いて検証してみました。
4つの関数が定義されています。
上の2つは、ディレクトリを作成してそれから削除しています。ディレクトリは空なので、fsのrmdirでも、rimrafの削除でも成功します。
ただし、下の2つは、作成したディレクトリ以下にファイルを作成しています。
※ファイルの作成は、openメソッドに第二引数として"a"を渡すと実現できます。
rimrafでのディレクトリ削除が成功するのに対して、fsでの削除は失敗してしまいます。
その時のエラーが以下のとおり。
Error: ENOTEMPTY: directory not empty, rmdir 'foo'
というわけで、空ではないディレクトリ削除はrimrafを使いましょうという話でした。