fs-extraパッケージの置き換え

fs-extraパッケージを便利に使っていたのだが、よくよく確認してみるとreadJson()outputFile()だけしか使っていなかった。それらを使うだけにはfs-extraパッケージはちょっと大きすぎる。両者はコア・モジュールと小さなパッケージでどうにかなりそうなので、ついにという感じで書き換えていくことにした。

指定したパスを読み、JSONとしてパースし、オブジェクトに格納してくれるreadJson()は、fsモジュールとJSON#parse()を組み合わせるだけで置き換えられる。BOMがありそうならそれに気を付けるくらいで良いだろう。

outputFile()は親のディレクトリーがなかったら自動的に作ってくれるものだ。これはコア・モジュールだけで実装するとかなり辛いので、安定のmkdirpを使うのが良さそうだ。

var fs = require("fs");
var mkdirp = require("mkdirp");
var path = require("path");

var data = "Hi!";
var dest = "/some/non/existent/path/to/dest.ext";

// fs-extra.outputFile(dest, data, function (err) {});
mkdirp(path.dirname(dest), function (err) {
	if (err) {
		throw err;
	}

	fs.writeFile(dest, data, function (err2) {
		if (err2) {
			throw err2;
		}
	});
});

書き換えの主な理由は最初に書いたように大きすぎることだ。もうひとつ隠れた理由として、fs-extraパッケージがいつまでたってもメジャーリリースされず、依存アップデートが面倒になってきたことがある。メジャー・バージョン出るまでは更新しないつもりでいたが、fs-extraパッケージが依存している某パッケージの出す警告のせいで更新を強いられ、嫌になった。