https://github.com/maxlath/onchange-mini
run a command on file(s) change, the minimalist way
https://github.com/maxlath/onchange-mini
Last synced: 25 days ago
JSON representation
run a command on file(s) change, the minimalist way
- Host: GitHub
- URL: https://github.com/maxlath/onchange-mini
- Owner: maxlath
- Created: 2016-12-31T10:00:18.000Z (over 9 years ago)
- Default Branch: main
- Last Pushed: 2023-11-30T14:50:02.000Z (over 2 years ago)
- Last Synced: 2025-11-20T03:10:32.560Z (8 months ago)
- Language: JavaScript
- Size: 3.91 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# onchange-mini
run a command on file(s) change, the minimalist way
## Summary
- [Motivation](#motivation)
- [Installation](#installation)
- [How-to](#how-to)
- [Watch file(s) changes](#watch-files-changes)
- [Watch directories](#watch-directories)
- [Debug](#debug)
- [For any other feature](#for-any-other-feature)
- [Alternatives](#alternatives)
- [With inotifywait](#with-inotifywait)
## Motivation
It happened repetively that [onchange](https://github.com/Qard/onchange) didn't work for me, for reasons I couldn't track down. So, out of frustration, I wrote a minimalist implementation that would just do the thing I needed: watching a few files and running a script when they change. And it worked! So I wrapped it into this module, mostly for my own use, but maybe you will find it useful too.
## Installation
To make it accessible to scripts in a project ([learn more](http://www.2ality.com/2016/01/locally-installed-npm-executables.html)):
```sh
npm install --save-dev onchange-mini
```
Or to make it accessible globally:
```sh
npm install -g onchange-mini
```
## How-to
### Watch file(s) changes
```sh
onchange-mini ./a/file/to/watch ./another/file -- echo 'the wind of CHAaaAAAaaaNGE ♪ ♫'
# works great with npm scripts
onchange-mini ./a/file/to/watch ./another/file -- npm run build'
```
### Watch directories
```sh
onchange-mini ./a/folder/to/watch ./another/folder -- the command to execute
```
**:warning: :one: this will only trigger an event when a file is created, renamed, or removed, not when the files themselves change.**
**:warning: :two: this isn't watching recursively: any file change in subfolders won't be detected**
You can work around :warning: :one: by watching both the directory and its files like so
```sh
onchange-mini ./a/folder/to/watch ./a/folder/to/watch/* -- the command to execute
```
but beware that it needs to be restarted to watch new files
### Debug
```sh
export DEBUG=true; onchange-mini ./a/file/to/watch -- the command to execute
```
### For any other feature
**Option 1**: use [onchange](https://github.com/Qard/onchange) if it works for you
**Option 2**:
* open `./index.js`
* hack your way
* minimalist PR welcome
## Alternatives
### With inotifywait
```sh
while true ; do inotifywait -r /some/folder -e modify && echo 'CHANGE'; done
```
[add yours]