コンパイラかく語りき

import { Fun } from 'programming'

【Node.js】FileSystem.rmdir vs rimraf

Nodeを書いていて、ディレクトリを削除したいときがあるかもしれません。例:ビルド前にディレクトリクリーン。

 

そんなときに使えるのがrimrafというパッケージ。

github.com

Unixコマンドのrm -rfと同じ挙動が実現できます。

 

 

でも、Nodeの標準パッケージにfsというものもあります。そのfsにもrmdirっていうメソッドを発見したので、両者の違いについて軽く調べました。

 

違い

結論から言うと、fsのrmdirメソッドは空のディレクトリしか消せないようです。

stackoverflow.com

 

検証

コードを書いて検証してみました。

gist600de476b641ddc4dc5d

 

4つの関数が定義されています。

上の2つは、ディレクトリを作成してそれから削除しています。ディレクトリは空なので、fsのrmdirでも、rimrafの削除でも成功します。

 

ただし、下の2つは、作成したディレクトリ以下にファイルを作成しています。

※ファイルの作成は、openメソッドに第二引数として"a"を渡すと実現できます。

stackoverflow.com

 

rimrafでのディレクトリ削除が成功するのに対して、fsでの削除は失敗してしまいます。

その時のエラーが以下のとおり。

Error: ENOTEMPTY: directory not empty, rmdir 'foo'

 

というわけで、空ではないディレクトリ削除はrimrafを使いましょうという話でした。