ディレクトリ内全てのファイル一覧を取得するというありふれた処理ですがたまたまワンライナーを思いついたのでメモ代わりに紹介します
同期メソッドなので使いどころには注意してください
JavaScript
const fs = require('fs')
const listFiles = (dir) =>
fs.readdirSync(dir, { withFileTypes: true }).flatMap(dirent =>
dirent.isFile() ? [`${dir}/${dirent.name}`] : listFiles(`${dir}/${dirent.name}`)
)
console.log(listFiles('hoge/fuga'))
fs.readdirに withFileTypes: true
オプションが追加されてたんですね、最近知りました
https://nodejs.org/api/fs.html#fs_fs_readdirsync_path_options
${dir}/${dirent.name}
を2回書くのは良くないので実際に使う場合はワンライナーにこだわらず変数に入れるのがいいです
flatMapを使ってるのでNode.js v11以上じゃないと動きません
TypeScript
import fs from 'fs'
const listFiles = (dir: string): string[] =>
fs.readdirSync(dir, { withFileTypes: true }).flatMap(dirent =>
dirent.isFile() ? [`${dir}/${dirent.name}`] : listFiles(`${dir}/${dirent.name}`)
)
console.log(listFiles('hoge/fuga'))
requireをimportに変えて、引数と返り値に型を指定しただけです
普段はTypeScriptのフレームワークをOSSで開発してるのでTwitterも見ていってください
Twitter@m_mitsuhide