ajr-sync
v1.1.0
Published
File sync watcher for Termux with single sync command and bidirectional package.json sync
Maintainers
Readme
# AJR Sync - File Sync Watcher for Termux



Un watcher de archivos inteligente que sincroniza cambios en tiempo real usando rsync, diseñado específicamente para Termux. Perfecto para desarrolladores que trabajan en proyectos entre el almacenamiento interno y Termux.
## 🚀 Características
- 🔄 **Sincronización en tiempo real** - Detecta cambios automáticamente
- ⚡ **Sync único rápido** - Comando directo para sincronización inmediata
- 🎯 **Configurable** - Adaptable a cualquier proyecto
- 🚫 **Exclusiones inteligentes** - Ignora node_modules, .git, etc.
- 📱 **Diseñado para Termux** - Funciona perfectamente en Android
- 🛡️ **Manejo de errores** - Reintentos automáticos y recuperación
- 📊 **Logs detallados** - Información clara del proceso
- 🔄 **Sync bidireccional** - Sincroniza package.json en ambas direcciones
## 📦 Instalación
```bash
# Instalar desde npm
npm install -g ajr-sync
# O instalar localmente en tu proyecto
npm install ajr-sync --save-dev🛠️ Configuración Rápida
- Inicializar configuración
# En la raíz de tu proyecto
ajr-sync initEsto creará un archivo .ajr-sync/settings.json con la configuración básica.
- Editar configuración
Abre el archivo .ajr-sync/settings.json y configura tus rutas:
{
"dirs": {
"origin": "/storage/emulated/0/www/mi-proyecto/",
"destiny": "~/mi-proyecto/"
},
"excludes": [".next", ".git", "node_modules", ".DS_Store", "*.tmp", "*.log"],
"flags": ["a", "v"],
"debounceTime": 2000
}- Usar los comandos
# Sincronización única rápida
ajr-sync sync
# Modo watcher continuo
ajr-sync watch
# Dry-run (ver qué se sincronizaría)
ajr-sync sync --dry-run⚙️ Configuración Detallada
Estructura del archivo de configuración
{
"dirs": {
"origin": "/ruta/origen/",
"destiny": "/ruta/destino/"
},
"excludes": [
".next",
".git",
"node_modules",
".DS_Store",
"*.tmp",
"*.log"
],
"flags": ["a", "v"],
"debounceTime": 2000,
"maxRetries": 5,
"retryDelay": 5000,
"healthCheckInterval": 30000
}Propiedades de configuración
| Propiedad | Tipo | Requerido | Descripción |
|:---------:|:----:|:---------:|:-----------:|
| dirs.origin | string | ✅ | Ruta de origen a monitorear |
| dirs.destiny | string | ✅ | Ruta de destino para sincronizar |
| excludes | array | ❌ | Patrones de archivos/directorios a excluir |
| flags | array | ❌ | Flags de rsync (por defecto: ["a", "v"]) |
| debounceTime | number | ❌ | Tiempo de espera antes de sincronizar (ms) |
| maxRetries | number | ❌ | Máximo de reintentos en caso de error |
| retryDelay | number | ❌ | Tiempo entre reintentos (ms) |
| healthCheckInterval | number | ❌ | Intervalo de health checks (ms) |
Rutas comunes en Termux
Origen (almacenamiento interno):
/storage/emulated/0/www/tu-proyecto/
/storage/emulated/0/Documents/proyectos/
/storage/emulated/0/Download/dev/Destino (Termux home):
~/tu-proyecto/ # Se expande a: /data/data/com.termux/files/home/tu-proyecto/
/data/data/com.termux/files/home/tu-proyecto/🎯 Uso Avanzado
Comandos disponibles
# Inicializar configuración
ajr-sync init
# Sincronización única rápida
ajr-sync sync
# Sincronización con dry-run
ajr-sync sync --dry-run
ajr-sync sync -d
# Iniciar watcher con configuración por defecto
ajr-sync watch
# Usar archivo de configuración personalizado
ajr-sync watch --config ./config/sync.json
ajr-sync sync --config ./custom-config.json
# Ver ayuda
ajr-sync --helpFlags de rsync comunes
| Flag | Descripción |
|:----:|:-----------:|
| a | Modo archivo (preserva permisos, timestamps) |
| v | Modo verbose (muestra detalles) |
| delete | Elimina archivos en destino que no existen en origen |
| z | Compresión durante transferencia |
| progress | Muestra progreso de transferencia |
Ejemplo de configuración para React/Next.js
{
"dirs": {
"origin": "/storage/emulated/0/www/mi-app/",
"destiny": "~/mi-app/"
},
"excludes": [
".next",
".git",
"node_modules",
".DS_Store",
"*.tmp",
"*.log",
"next-env.d.ts",
"yarn-error.log"
],
"flags": ["a", "v"],
"debounceTime": 1500
}📋 Flujo de Trabajo Recomendado
Opción 1: Desarrollo con Sync Único (Rápido)
# 1. Sincronizar cambios manualmente cuando necesites
ajr-sync sync
# 2. Ejecutar comandos en Termux
cd ~/mi-proyecto
npm run devOpción 2: Desarrollo con Watcher (Automático)
# 1. Iniciar watcher en una terminal
ajr-sync watch
# 2. En otra terminal, trabajar en el proyecto
cd ~/mi-proyecto
npm run devEjemplo práctico completo:
# 1. En la raíz de tu proyecto (almacenamiento interno)
ajr-sync init
# 2. Editar .ajr-sync/settings.json con tus rutas
# 3. Sincronizar por primera vez
ajr-sync sync
# 4. En Termux, ir al directorio destino y instalar dependencias
cd ~/mi-proyecto
npm install
# 5. Usar sync para cambios futuros o iniciar watcher
ajr-sync sync
# O
ajr-sync watch🔄 Sync Bidireccional de Package.json
AJR Sync monitorea automáticamente cambios en package.json, package-lock.json y yarn.lock en el directorio destino y los sincroniza de vuelta al origen. Perfecto para cuando instalas dependencias en Termux.
🐛 Solución de Problemas
Error: "Config file not found"
# Asegúrate de haber ejecutado:
ajr-sync initError: "Permission denied"
# Dar permisos de almacenamiento a Termux
termux-setup-storageError: "rsync command not found"
# Instalar rsync en Termux
pkg install rsyncEl watcher no detecta cambios
· Verifica que las rutas en la configuración sean correctas · Asegúrate de que Termux tiene permisos de almacenamiento · Revisa que el directorio origen existe
Los archivos no se sincronizan
· Verifica los flags de rsync en la configuración · Revisa los excludes - quizás estás excluyendo archivos importantes · Aumenta el debounceTime si hay muchos archivos
🔧 Desarrollo
Estructura del proyecto
ajr-sync/
├── bin/
│ └── ajr-sync.js # Punto de entrada CLI
├── lib/
│ ├── watcher.js # Lógica principal del watcher
│ ├── sync-manager.js # Manejo de sync bidireccional
│ ├── config.js # Manejo de configuración
│ └── utils.js # Utilidades y helpers
└── package.jsonInstalación desde fuente
git clone <repository>
cd ajr-sync
npm install
npm link # Para uso global📝 Licencia
MIT License - ver archivo LICENSE para detalles.
🤝 Contribuciones
¡Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
- Commit tus cambios (git commit -m 'Add some AmazingFeature')
- Push a la rama (git push origin feature/AmazingFeature)
- Abre un Pull Request
⚠️ Notas Importantes
· Requiere Termux con permisos de almacenamiento · Rsync debe estar instalado en Termux · Las rutas son case-sensitive · Usa trailing slash (/) en rutas de directorios para mejor comportamiento de rsync · El comando sync es más rápido que watch para sincronizaciones únicas
¿Problemas? Abre un issue en GitHub con los detalles de tu configuración y el error que estás experimentando.
