An open API service indexing awesome lists of open source software.

https://github.com/hbisneto/nodemodulescleaner

Automatic cleanup of forgotten node_modules directories.
https://github.com/hbisneto/nodemodulescleaner

automation cleanup cli directory-management disk-space filesystem modules node python-tool

Last synced: 4 months ago
JSON representation

Automatic cleanup of forgotten node_modules directories.

Awesome Lists containing this project

README

          

# NodeModulesCleaner (nmc)

![CI](https://github.com/hbisneto/NodeModulesCleaner/actions/workflows/tests.yml/badge.svg)
![License](https://img.shields.io/github/license/hbisneto/NodeModulesCleaner)

[![PyPI](https://img.shields.io/pypi/v/NodeModulesCleaner?logo=python&logoColor=white&color=blue)](https://pypi.org/project/nodemodulescleaner/)
[![Python](https://img.shields.io/badge/Python-%3E=3.10-blue)](https://python.org/)

![Issues](https://img.shields.io/github/issues/hbisneto/NodeModulesCleaner)
![Stars](https://img.shields.io/github/stars/hbisneto/NodeModulesCleaner?style=social)

[![codecov](https://codecov.io/github/hbisneto/NodeModulesCleaner/graph/badge.svg?token=TPY9K1INYE)](https://codecov.io/github/hbisneto/NodeModulesCleaner)

> 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)

```bash
pip install nodemodulescleaner
```

---

## โšก Quick Usage

Scan your home directory:

```bash
nmc ~
```

Preview what would be deleted:

```bash
nmc ~ --dry-run
```

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

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

Fully automated cleanup (no confirmation prompt):

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

---

## โš™๏ธ CLI Options

```text
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:

```bash
nmc --dry-run
```

---

# ๐Ÿง‘โ€๐Ÿ’ป Developer Guide (Dev)

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

---

## ๐Ÿ“ Project Structure

```text
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

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

---

### 2๏ธโƒฃ Create a virtual environment

```bash
python3 -m venv venv
source venv/bin/activate
```

---

### 3๏ธโƒฃ Install in editable mode

```bash
pip install -e .
```

This allows immediate reflection of local code changes.

---

## โ–ถ Running Locally

```bash
nmc ~/projects --dry-run
```

or:

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

---

## ๐Ÿงช Running Tests

```bash
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!