
Nos encanta PHP por su simplicidad: usted escribe el código, actualiza la página en el navegador e inmediatamente ve los cambios. Pero si se trata de comandos de consola, que pueden ser procesos de larga duración, por ejemplo, si escribimos un servidor HTTP asíncrono para cargar archivos, el desarrollo puede ser muy doloroso.
No había una solución adecuada en el ecosistema PHP para reiniciar automáticamente las aplicaciones cuando se realizaban cambios en el código fuente. Por lo tanto, decidí hacer mi herramienta, en PHP puro y con acceso a través de Composer.
Es como Nodemon, pero en PHP.
Por un tiempo, yo mismo usé
Nodemon . Esta es una herramienta del mundo de Node.js, sin embargo, si la personaliza un poco, puede usarla con scripts PHP. Pero, de hecho, no quiero instalar Node.js y arrastrar un montón de paquetes NPM desconocidos para mí a mi aplicación asincrónica de PHP para reiniciarlo.
Dado que me comunico activamente en Twitter, pregunté quién más tenía este problema y me gustaría obtener una solución. Al ver interés, me senté a escribir una herramienta que proporciona la misma funcionalidad que Nodemon,
solo en PHP y para PHP .

Ha pasado un mes: con
PHP-Watcher ya no necesita instalar Nodemon ni ningún otro paquete NPM para desarrollar su aplicación PHP de larga duración.
Asi es como funciona
La biblioteca se puede instalar a través de Composer:
composer global require seregazhuk/php-watcher
Imagine que estamos trabajando en una aplicación basada en Symfony de larga duración. El punto de entrada a nuestra aplicación es el archivo public / index.php. Queremos rastrear los cambios en las carpetas src y config. También queremos que la aplicación se reinicie automáticamente tan pronto como cambiemos el código fuente o los parámetros de configuración. Aquí se explica cómo resolver este problema:
php-watcher public/index.php --watch src --watch config
El comando ejecutará el script public / index.php, que comenzará a rastrear los cambios en los directorios src y config. Tan pronto como el archivo cambie en cualquiera de ellos, PHP-Watcher reiniciará el script.
Por defecto, solo rastrea los cambios en los archivos PHP. Pero Symfony almacena sus configuraciones en yaml. Por lo tanto, necesitamos decirle explícitamente al reloj para que rastree archivos PHP y yaml. Esto se hace usando la opción --ext:
php-watcher public/index.php --watch src --watch config --ext php,yaml
Supongamos que entendemos que no necesitamos reiniciar las aplicaciones con ningún cambio dentro del directorio src. Por ejemplo, nos gustaría ignorar los cambios en el subdirectorio src / Migraciones. En este caso, puede usar la opción --ignore:
php-watcher public/index.php --watch src --watch config --ext php,yaml --ignore Migrations
Ahora PHP-Watcher comenzará a rastrear los cambios en los directorios src y config, pero ignorará cualquier cambio dentro del subdirectorio Migraciones. Además, por defecto ignora los cambios en todos los archivos dot y VCS.
Watcher admite la personalización de su comportamiento no solo a través de opciones de línea de comandos, sino también a través de archivos de configuración. Si no desea pasar un montón de opciones y parámetros cada vez en la línea de comando, puede crear un archivo de configuración .php-watcher.yml. Por ejemplo, el comando anterior se puede reemplazar con el siguiente archivo de configuración:
watch: - src - config extensions: - php - yaml ignore: - Migrations
Al tener dicho archivo, simplemente podemos activar el "reloj" especificando solo el script PHP que necesita reiniciarse. Todas las demás configuraciones se tomarán del archivo:
php-watcher public/index.php
¿Qué sucede si tenemos un archivo de configuración y argumentos de línea de comando? En este caso, todos los argumentos pasados desde la línea de comando sobrescribirán los valores correspondientes del archivo de configuración.
De forma predeterminada, PHP-Watcher utiliza el ejecutable de PHP para ejecutar el script. Escribimos el comando en la terminal:
php-watcher public/index.php
Bajo el capó, se crea un proceso secundario con el comando php public / index.php. En la mayoría de los casos, esto es lo que necesita. Sin embargo, si su entorno tiene un archivo ejecutable diferente, puede especificar explícitamente qué comando ejecutar. Por ejemplo, cuando tenemos varias versiones de PHP en el mismo sistema, y queremos ejecutar nuestra aplicación con el ejecutable php7.4, puede usar la opción --exec y especificar su ejecutable:
php-watcher public/index.php --exec php7.4
Lo mismo a través del archivo de configuración:
watch: - src - config executable: php7.4
PHP-Watcher no reinicia automáticamente la aplicación si se bloquea. En el entorno de desarrollo, esto no es particularmente necesario, porque mientras estamos desarrollando una nueva aplicación, es normal que a veces se bloquee. Si la aplicación falla (termina con un código que no sea 0), el "reloj" nos lo hará saber. Tan pronto como arreglemos el código, los cambios se detectarán en las fuentes y la aplicación se reiniciará.
Gracias por su atencion! Puede encontrar más información sobre PHP-Watcher en
la página de inicio del proyecto en GitHub . La documentación describe los patrones básicos de uso. El proyecto aún está en desarrollo, pero la API ya es bastante estable. Me alegrará si lo usas.
PD: siéntase libre de dejar comentarios y sugerencias a través del problema en GitHub.