Skip to main content

Automatic cleanup of forgotten node_modules directories

Project description

NodeModulesCleaner (nmc)

CI License

PyPI Python

Issues Stars

codecov

Automatic cleanup of forgotten node_modules directories.

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.


✨ Features

  • 🔍 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

📦 Why does this exist?

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)

🚀 Installation

Using pip (recommended)

pip install nodemodulescleaner

⚡ Quick Usage

Scan your home directory:

nmc ~

Preview what would be deleted:

nmc ~ --dry-run

Delete folders not accessed in the last 30 days and larger than 200 MB:

nmc ~ --days 30 --min-size 200

Fully automated cleanup (no confirmation prompt):

nmc ~ --days 60 --min-size 100 -y

⚙️ CLI Options

usage: nmc [path] [options]

positional arguments:
  path                Directory to scan (default: current directory)

options:
  --days N            Ignore node_modules accessed within the last N days (default: 30)
  --min-size MB       Minimum size in MB (default: 0)
  --dry-run           Simulate the cleanup without deleting anything
  -y, --yes           Automatically confirm deletion (non-interactive mode)

🛡️ Safety First

Before deleting anything, the tool:

  • Lists all matching directories
  • Shows total recoverable disk space
  • Requires explicit confirmation (unless -y is used)

Always test first:

nmc <path> --dry-run

🧑‍💻 Developer Guide (Dev)

This section is for contributors and developers who want to run, test, or extend the project.


📁 Project Structure

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

🔧 Local Development Setup

1️⃣ Clone the repository

git clone https://github.com/hbisneto/NodeModulesCleaner.git
cd NodeModulesCleaner

2️⃣ Create a virtual environment

python3 -m venv venv
source venv/bin/activate

3️⃣ Install in editable mode

pip install -e .

This allows immediate reflection of local code changes.


▶ Running Locally

nmc ~/projects --dry-run

or:

python -m nmc.cli ~/projects --dry-run

🧪 Running Tests

pytest -v

The architecture guarantees:

  • No interactive input during tests
  • No filesystem pollution
  • Fully deterministic execution

🏗 Architecture Overview

Core Logic → nmc/core.py

Handles:

  • Directory scanning
  • Filtering logic
  • Cleanup execution

No user interaction. No printing.


CLI Interface → nmc/cli.py

Handles:

  • Argument parsing
  • User prompts
  • Output formatting
  • UX flow

This separation enables:

  • Stable CI pipelines
  • Easy automation
  • Reliable testing
  • Low bug surface

🤝 Contributing

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! ❤️


📜 License

MIT License — feel free to use, modify, and distribute.


⭐ Support

If this tool helped you, please leave a ⭐ on GitHub — it really helps!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nodemodulescleaner-1.1.1.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nodemodulescleaner-1.1.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file nodemodulescleaner-1.1.1.tar.gz.

File metadata

  • Download URL: nodemodulescleaner-1.1.1.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.0

File hashes

Hashes for nodemodulescleaner-1.1.1.tar.gz
Algorithm Hash digest
SHA256 db1b04d1e683d1c81040fdb7319e1a616ce97d6875d8f16b5c5e432b8a9a432b
MD5 88c08f84e1b9a0091f5450bf46f7f359
BLAKE2b-256 45631734c8de8ec3586a90b9640eece3c13f3a7a170d9137e3419b9d7bc84a6b

See more details on using hashes here.

File details

Details for the file nodemodulescleaner-1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for nodemodulescleaner-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 caa82465561edb183daedd54f514618db66ee6f602d5b9e104d226380aed53bf
MD5 2376d182103f22069ebd29251e4e126b
BLAKE2b-256 404e6228ab77b0991ddd378749f6c1522c668fc88a6914ab28fac56b2ee1e81e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page