中野's workspace

  • Profile
  • Privacy
  • Contact

2019/06/24

nodejsで再帰的にディレクトリを作成する

  • #Node.js
  • #tips

目次

TL;DR

以下のコードで再帰的にディレクトリを作成することが出来ます。 fs.mkdir("foo/bar", { recursive: true }, err => {}

解説

nodeにはfs.mkdirfs.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以下の場合は再帰的に親ディレクトリが存在するかを見てあげる必要があります。

参考

このエントリーをはてなブックマークに追加