1. ホーム
  2. node.js

[解決済み】ノードのfs.mkdirSyncでフルパスを作成する方法は?

2022-04-17 09:35:16

質問

フルパスが存在しない場合に、フルパスを作成しようとしています。

コードは以下のようになります。

var fs = require('fs');
if (!fs.existsSync(newDest)) fs.mkdirSync(newDest); 

このコードは、サブディレクトリが1つだけ('dir1' のような newDest)であれば問題なく動作しますが、('dir1/dir2') のようなディレクトリパスがある場合は、次のように失敗します。 エラーです。ENOENT, no such file or directory

必要最小限のコード行数でフルパスを作成できるようにしたいのですが。

fsにrecursiveオプションがあるのを読んで、以下のように試してみました。

var fs = require('fs');
if (!fs.existsSync(newDest)) fs.mkdirSync(newDest,'0777', true);

存在しないディレクトリを再帰的に作成する、そんな簡単なことでいいような気がするのですが。それとも、パスを解析して各ディレクトリをチェックし、まだ存在しない場合は作成する必要があるのでしょうか?

私はNodeにかなり慣れていないんです。もしかしたら、私は古いバージョンのFSを使っているのかもしれませんね?

解決方法を教えてください。

一つの方法として shelljsモジュール

npm install shelljs

var shell = require('shelljs');
shell.mkdir('-p', fullPath);

そのページから

<ブロッククオート

利用可能なオプション

p: フルパス (必要に応じて中間ディレクトリを作成します)

他の人が指摘しているように、もっと焦点を絞ったモジュールが他にあります。 しかし、mkdirp 以外にも、たくさんの便利なシェル操作 (which, grep など...) があり、Windows と *nix で動作します。

Edit: コメントによると、mkdir cliインスタンスを持っていないシステムでは動作しないようです。 そのようなことはありません。 シェルに似た関数のポータブルなクロスプラットフォームのセットを作成することです。 これはWindowsでも動作します。