Create a cluster of workers to iterate through the filesystem
import readdirCluster, { Stat } from 'readdir-cluster'
// note that Stat is not the same as fs.Stats as it has functions removed, as it needed to be serialisable
function iterator(path: string, filename: string, stat: Stat) {
// skip directories and files that start with .
if (filename[0] === '.') return false
// do not recurse into directories
if (stat.directory) return false
}
const paths = await readdirCluster({ directory: '.', iterator })
console.log(paths)
Benchmarks:
-
Running
readdir-cluster .
returns 7388 files in 500ms -
Running
readdir
withrecursive: true
returns 7388 files in 100msimport { readdir } from 'fs' readdir('.', { recursive: true }, (err, files) => { if (err) console.error(err) else if (files.length) process.stdout.write(files.join('\n') + '\n') })
-
Running fdir returns 6480 files in 100ms
import { fdir } from 'fdir' const api = new fdir().withBasePath().crawl(process.argv[2]) api.withPromise().then((files) => { if (files.length) process.stdout.write(files.join('\n') + '\n') })
Recommendations:
- if you target Node.js 18.7 and above, you should use
fs.readdir
withrecursive: true
- if you target older Node.js versions, you should use
@bevry/fs-list
- if you target older Node.js versions and you want a stat object, use
readdir-cluster
- if you target Nodejs 12 and above, and want a lot of customisation, use fdir
As for why this package exists, readdir-cluster
was created in 2005, recursive
was added to Node.js in 2023, and fdir
was created in 2020. That said, there are several issues that could potentially improve readdir-cluster
performance.
- Install:
npm install --global readdir-cluster
- Executable:
readdir-cluster
- Install:
npm install --save readdir-cluster
- Executable:
npx readdir-cluster
- Import:
import pkg from ('readdir-cluster')
- Require:
const pkg = require('readdir-cluster').default
This package is published with the following editions:
readdir-cluster
aliasesreaddir-cluster/index.cjs
which uses the Editions Autoloader to automatically select the correct edition for the consumer's environmentreaddir-cluster/source/index.ts
is TypeScript source code with Import for modulesreaddir-cluster/edition-es2022/index.js
is TypeScript compiled against ES2022 for Node.js 14 || 16 || 18 || 20 || 21 with Require for modulesreaddir-cluster/edition-es2017/index.js
is TypeScript compiled against ES2017 for Node.js 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modulesreaddir-cluster/edition-es2015/index.js
is TypeScript compiled against ES2015 for Node.js 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modulesreaddir-cluster/edition-es5/index.js
is TypeScript compiled against ES5 for Node.js 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with Require for modulesreaddir-cluster/edition-es2017-esm/index.js
is TypeScript compiled against ES2017 for Node.js 12 || 14 || 16 || 18 || 20 || 21 with Import for modulesreaddir-cluster/edition-types/index.d.ts
is TypeScript compiled Types with Import for modules
Discover the release history by heading on over to the HISTORY.md
file.
Discover how to contribute via the CONTRIBUTING.md
file.
- Benjamin Lupton — Accelerating collaborative wisdom.
- Benjamin Lupton — Accelerating collaborative wisdom.
- Andrew Nesbitt — Software engineer and researcher
- Balsa — We're Balsa, and we're building tools for builders.
- Codecov — Empower developers with tools to improve code quality and testing.
- Poonacha Medappa
- Rob Morris
- Sentry — Real-time crash reporting for your web apps, mobile apps, and games.
- Syntax — Syntax Podcast
- Andrew Nesbitt
- Armen Mkrtchian
- Balsa
- Chad
- Codecov
- dr.dimitru
- Elliott Ditman
- entroniq
- GitHub
- Hunter Beast
- Jean-Luc Geering
- Michael Duane Mooring
- Michael Harry Scepaniak
- Mohammed Shah
- Mr. Henry
- Nermal
- Pleo
- Poonacha Medappa
- Rob Morris
- Robert de Forest
- Sentry
- ServieJS
- Skunk Team
- Syntax
- WriterJohnBuck
Unless stated otherwise all works are:
- Copyright © Benjamin Lupton
and licensed under: