Automatic cleanup of forgotten
node_modulesdirectories.
NodeModulesCleaner is a fast, safe, and practical CLI tool that helps you free up disk space by detecting and removing old and unused node_modules folders from your system.
It recursively scans your filesystem, identifies abandoned node_modules directories based on access time and size, and optionally deletes them β safely and efficiently.
- π Recursive directory scanning
- π Filter by last access time (
--days) - π¦ Filter by minimum directory size (
--min-size) - π Dry-run mode (preview before deleting)
- π€ Non-interactive automation mode (
--yes) - β‘ Very fast (no heavy indexing or hashing)
- π§ͺ Fully testable architecture (core separated from CLI)
- π§© Clean, maintainable and extensible design
JavaScript projects often accumulate hundreds of megabytes or even gigabytes inside node_modules.
Over time, many of these folders become abandoned, consuming large amounts of disk space and slowing down backups, indexing, and file searches.
This tool helps you:
- Clean forgotten dependencies
- Reclaim disk space
- Keep your development environment tidy
- Automate periodic cleanup (cron jobs, CI pipelines, scripts)
pip install nodemodulescleanerScan your home directory:
nmc ~Preview what would be deleted:
nmc ~ --dry-runDelete folders not accessed in the last 30 days and larger than 200 MB:
nmc ~ --days 30 --min-size 200Fully automated cleanup (no confirmation prompt):
nmc ~ --days 60 --min-size 100 -yusage: nmc [path] [options]
positional arguments:
path Directory to scan (default: current directory)
options:
-h, --help show this help message and exit
-v, --version Show version information
--days DAYS Ignore node_modules accessed within the last N days (default: 30)
--min-size MIN_SIZE Minimum size in MB (default: 0)
--dry-run Simulate the cleanup without deleting anything
-y, --yes Automatically confirm deletion
Before deleting anything, the tool:
- Lists all matching directories
- Shows total recoverable disk space
- Requires explicit confirmation (unless
-yis used)
Always test first:
nmc <path> --dry-runThis section is for contributors and developers who want to run, test, or extend the project.
nmc/
βββ core.py # Business logic (scan + filters + cleanup)
βββ cli.py # CLI interface (argparse + UX)
βββ __init__.py
This separation ensures:
- High testability
- Clean architecture
- Easy extensibility
- Stable CLI behavior
git clone https://github.com/hbisneto/NodeModulesCleaner.git
cd NodeModulesCleanerpython3 -m venv venv
source venv/bin/activatepip install -e .This allows immediate reflection of local code changes.
nmc ~/projects --dry-runor:
python -m nmc.cli ~/projects --dry-runpytest -vThe architecture guarantees:
- No interactive input during tests
- No filesystem pollution
- Fully deterministic execution
Handles:
- Directory scanning
- Filtering logic
- Cleanup execution
No user interaction. No printing.
Handles:
- Argument parsing
- User prompts
- Output formatting
- UX flow
This separation enables:
- Stable CI pipelines
- Easy automation
- Reliable testing
- Low bug surface
Contributions are very welcome!
If you'd like to help improve NodeModulesCleaner, please check out the open issues on GitHub:
π https://github.com/hbisneto/NodeModulesCleaner/issues
There you will find:
- π Bug reports
- π Feature requests
- π§© Planned enhancements
- π Architecture improvements
- π§ͺ Testing and CI ideas
If you have a new idea, feel free to open a new issue or start a discussion.
Every contribution β from code to documentation, testing, or ideas β is highly appreciated! β€οΈ
MIT License β feel free to use, modify, and distribute.
If this tool helped you, please leave a β on GitHub β it really helps!