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パッケージが依存している某パッケージの出す警告のせいで更新を強いられ、嫌になった。