2019/06/24
nodejsで再帰的にディレクトリを作成する
TL;DR
以下のコードで再帰的にディレクトリを作成することが出来ます。
fs.mkdir("foo/bar", { recursive: true }, err => {}
解説
nodeにはfs.mkdir
やfs.mkdirSync
などのディレクトリを作成する関数が存在します。
これらの関数はmkdir -p
のようにディレクトリを再帰的に作成する機能が備わっていなかったため、例えば以下のようなコードは動きませんでした。
const directory = "src/resources/markdown/blog";
fs.mkdir(directory, err => {
if(err) console.log(err);
});
以下のコードを実行するとError: ENOENT: no such file or directory
が出力されると思います。
そんな中でnode 10.12.0から以下のような変更が入りました。
fs
Added a `recursive` option to `fs.mkdir` and `fs.mkdirSync`. If this option
is set to true, non-existing parent folders will be automatically created. #21875
訳:
`fs.mkdir` and `fs.mkdirSync`関数に`recursive`オプションが加わりました。
`recursive`オプションをtrueにすることで、
存在しない親ディレクトリが自動的に作成されるようになります。
https://github.com/nodejs/node/pull/21875
これにより、親ディレクトリが存在するかを再帰的に見る処理が不要になります。
先ほども書きましたが、以下のように書けば存在しない親ディレクトリが自動的に作成されるようになります。
const directory = "src/resources/markdown/blog";
fs.mkdir(directory, { recursive: true }, err => {
if(err) console.log(err);
});
あくまでもこれはnodeのバージョンが10以上の場合のみ有効です。
nodeのバージョンが10以下の場合は再帰的に親ディレクトリが存在するかを見てあげる必要があります。