時々Node.jsでモジュールなしかつ同期的にファイル一覧を取得する必要があるので書いた。

実装

  1. file一覧

const fs = require("fs");
const path = require("path");
const targetDirpath = "./target";

function listFiles(dir) {
  return fs
    .readdirSync(dir, { withFileTypes: true })
    .flatMap((dirent) => {
      const filePath = path.join(dir, dirent.name);
      if (dirent.isFile()) {
        return [filePath];
      }
      return listFiles(filePath);
    });
}
const filePathList = listFiles(targetDirpath);
console.log(filePathList)

確認

  1. tree ./target/

./target/
└── bbb
    ├── ccc.txt
    ├── ddd
    │   └── bbb
    │       └── aaa.txt
    ├── empty ※ディレクトリ
    └── ggg
        └── xyz ※ファイル

+ . node fileList.js

szk@X1:/mnt/c/Users/szk/tmp/sample$ node fileList.js
[
  'target/bbb/ccc.txt',
  'target/bbb/ddd/bbb/aaa.txt',
  'target/bbb/ggg/xyz'
]