PHP-Watcher: un outil qui simplifie le développement d'applications à longue durée de vie



Nous aimons PHP pour sa simplicité: vous écrivez le code, actualisez la page dans le navigateur et voyez immédiatement les changements. Mais s'il s'agit de commandes de console, qui peuvent être des processus de longue durée - par exemple, si nous écrivons un serveur HTTP asynchrone pour télécharger des fichiers - le développement peut être très douloureux.

Il n'y avait pas de solution appropriée dans l'écosystème PHP pour redémarrer automatiquement les applications lorsque des modifications étaient apportées au code source. Par conséquent, j'ai décidé de faire mon outil - en PHP pur et avec accès via Composer.

C'est comme Nodemon, mais en PHP


Pendant un certain temps, j'ai moi-même utilisé Nodemon . C'est un outil du monde de Node.js, cependant, si vous le personnalisez un peu, vous pouvez l'utiliser avec des scripts PHP. Mais en fait, je ne veux pas installer Node.js et faire glisser un tas de packages NPM que je ne connais pas dans mon application PHP asynchrone pour le redémarrer.

Comme je communique activement sur Twitter, j'ai demandé à qui d'autre avait ce problème et j'aimerais obtenir une solution. Voyant l'intérêt, je me suis assis pour écrire un outil qui fournit les mêmes fonctionnalités que Nodemon, uniquement en PHP et pour PHP .



Un mois s'est écoulé: avec PHP-Watcher, vous n'avez plus besoin d'installer Nodemon ou tout autre package NPM pour développer votre application PHP longue durée.

Voilà comment ça marche


La bibliothèque peut être installée via Composer:

composer global require seregazhuk/php-watcher 

Imaginez que nous travaillons sur une application de longue durée basée sur Symfony. Le point d'entrée de notre application est le fichier public / index.php. Nous voulons suivre les changements dans les dossiers src et config. Nous souhaitons également que l'application redémarre automatiquement dès que nous modifions le code source ou les paramètres de configuration. Voici comment résoudre ce problème:

 php-watcher public/index.php --watch src --watch config 

La commande exécutera le script public / index.php, qui commencera à suivre les modifications dans les répertoires src et config. Dès que le fichier change dans l'un d'eux, PHP-Watcher redémarrera le script.

Par défaut, il ne suit que les modifications apportées aux fichiers PHP. Mais Symfony stocke ses configs dans yaml. Par conséquent, nous devons dire explicitement à la montre qu'elle suit les fichiers PHP et yaml. Cela se fait en utilisant l'option --ext:

 php-watcher public/index.php --watch src --watch config --ext php,yaml 

Supposons que nous comprenions que nous n'avons pas besoin de redémarrer les applications avec des modifications dans le répertoire src. Par exemple, nous aimerions ignorer les modifications du sous-répertoire src / Migrations. Dans ce cas, vous pouvez utiliser l'option --ignore:

 php-watcher public/index.php --watch src --watch config --ext php,yaml --ignore Migrations 

PHP-Watcher va maintenant commencer à suivre les modifications dans les répertoires src et config, mais ignorera toutes les modifications dans le sous-répertoire Migrations. De plus, il ignore par défaut les modifications dans tous les fichiers dot et VCS.

Watcher prend en charge la personnalisation de son comportement non seulement via les options de ligne de commande, mais également via les fichiers de configuration. Si vous ne voulez pas passer un tas d'options et de paramètres à chaque fois sur la ligne de commande, vous pouvez créer un fichier de configuration .php-watcher.yml. Par exemple, la commande précédente peut être remplacée par le fichier de configuration suivant:

 watch: - src - config extensions: - php - yaml ignore: - Migrations 

Ayant un tel fichier, on peut simplement activer la "watch" en spécifiant uniquement le script PHP qui doit être redémarré. Tous les autres paramètres seront extraits du fichier:

 php-watcher public/index.php 

Que se passe-t-il si nous avons à la fois un fichier de configuration et des arguments de ligne de commande? Dans ce cas, tous les arguments passés depuis la ligne de commande écraseront les valeurs correspondantes du fichier de configuration.

Par défaut, PHP-Watcher utilise l'exécutable PHP pour exécuter le script. Nous écrivons la commande dans le terminal:

 php-watcher public/index.php 

Sous le capot, un processus enfant est créé avec la commande php public / index.php. Dans la plupart des cas, c'est ce dont vous avez besoin. Cependant, si votre environnement a un fichier exécutable différent, vous pouvez spécifier explicitement la commande à exécuter. Par exemple, lorsque nous avons plusieurs versions de PHP sur le même système, et que nous voulons exécuter notre application avec l'exécutable php7.4, vous pouvez utiliser l'option --exec et spécifier votre fichier exécutable:

 php-watcher public/index.php --exec php7.4 

La même chose à travers le fichier de configuration:

 watch: - src - config executable: php7.4 

PHP-Watcher ne redémarre pas automatiquement l'application en cas de panne. Dans l'environnement de développement, cela n'est pas particulièrement nécessaire - car pendant que nous développons une nouvelle application, il est normal qu'elle se bloque parfois. Si l'application plante (terminée par un code différent de 0), la "montre" nous le fera savoir. Dès que nous corrigeons le code, les modifications seront détectées dans les sources - et l'application redémarrera.

Merci de votre attention! Vous trouverez plus d'informations sur PHP-Watcher sur la page d'accueil du projet sur GitHub . La documentation décrit les schémas d'utilisation de base. Le projet est encore en développement, mais l'API est déjà assez stable. Je serai heureux si vous l'utilisez.

PS N'hésitez pas à laisser vos commentaires et suggestions à travers le numéro sur GitHub.

Source: https://habr.com/ru/post/fr475624/


All Articles