JavaScript
Node.js
fs
fs-extra

node.jsで階層ディレクトリ作成やコピーをしたいときは?

More than 3 years have passed since last update.

node.jsには標準でfsという普通に便利なファイル操作のライブラリがあります。しかし、fsにはプリミティブな機能しか用意されておらず、ディレクトリ階層を操作するにはひと手間必要になってしまいます。

例えば、

  • ディレクトリがなければ掘る(mkdir -pに相当)とか
  • ディレクトリ階層を丸ごとコピー(cp -rに相当)とか
  • ディレクトリ階層を削除(rm -rfに相当)

などの機能はありません。

それぞれ自作していくのもまぁ大きな手間ではありませんが、node-fs-extraというfsを拡張したモジュールを使うと、どれも簡単に実現できてしまうので、紹介します。

インストール

$ npm install fs-extra --save

使い方

node-fs-extrafsの素直な拡張になっているので、今まで

javascript
var fs = require('fs')

と書いていた箇所を

javascript
var fs = require('fs-extra')

に入れ替えれて使うことができます。fs-extraをrequireしてあれば、もうfsをrequireする必要はないということです。

利用例

ディレクトリがなければ掘る mkdirs

javascript
var fs = require('fs-extra');
fs.mkdirsSync('/some/path/that/does/not/exist/');

ディレクトリ階層をコピー copy

javascript
var fs = require('fs-extra');
fs.copySync('/path/to/srcdir', '/path/to/destdir');

copyにはfilterオプションがあり、特定のファイルだけコピーや削除することも可能です。

ディレクトリ階層を削除 remove

javascript
var fs = require('fs-extra');
fs.removeSync('/some/path/to/delete');

その他の機能

上に挙げた例では、同期呼び出し版(〜Sync)を紹介しましたが、もちろん非同期呼び出し用の関数もあります。

他にも moveや ensure{Dir,File,SymLink}、JSONファイルの読み書きなどの機能があり、比較的よく使う機能が盛り込まれた、便利なモジュールかなと思います。