
Adoramos o PHP por sua simplicidade: você escreve o código, atualiza a página no navegador e vê imediatamente as alterações. Mas se se trata de comandos do console, que podem ser processos de longa duração - por exemplo, se escrevermos um servidor HTTP assíncrono para fazer upload de arquivos - o desenvolvimento pode ser muito doloroso.
Não havia solução adequada no ecossistema PHP para reiniciar aplicativos automaticamente quando foram feitas alterações no código-fonte. Por isso, decidi fazer minha ferramenta - em PHP puro e com acesso pelo Composer.
É como o Nodemon, mas em PHP
Por um tempo, eu mesmo usei o
Nodemon . Essa é uma ferramenta do mundo do Node.js, no entanto, se você a personalizar um pouco, poderá usá-la com scripts PHP. Mas, na verdade, não quero instalar o Node.js e arrastar um monte de pacotes NPM desconhecidos para mim no meu aplicativo PHP assíncrono, a fim de reiniciá-lo.
Como eu me comunico ativamente no Twitter, perguntei lá quem mais tinha esse problema e gostaria de obter uma solução. Vendo interesse, sentei-me para escrever uma ferramenta que fornece a mesma funcionalidade do Nodemon,
apenas em PHP e para PHP .

Um mês se passou: com o
PHP-Watcher, você não precisa mais instalar o Nodemon ou qualquer outro pacote NPM para desenvolver seu aplicativo PHP de longa duração.
É assim que funciona
A biblioteca pode ser instalada através do Composer:
composer global require seregazhuk/php-watcher
Imagine que estamos trabalhando em um aplicativo baseado no Symfony de longa duração. O ponto de entrada para o nosso aplicativo é o arquivo public / index.php. Queremos acompanhar as alterações nas pastas src e config. Também queremos que o aplicativo seja reiniciado automaticamente assim que alterarmos o código fonte ou os parâmetros de configuração. Veja como resolver esse problema:
php-watcher public/index.php --watch src --watch config
O comando executará o script public / index.php, que começará a rastrear alterações nos diretórios src e config. Assim que o arquivo for alterado em qualquer um deles, o PHP-Watcher reiniciará o script.
Por padrão, ele rastreia apenas as alterações nos arquivos PHP. Mas o Symfony armazena suas configurações no yaml. Portanto, precisamos informar explicitamente o relógio para que ele rastreie os arquivos PHP e yaml. Isso é feito usando a opção --ext:
php-watcher public/index.php --watch src --watch config --ext php,yaml
Suponha que entendemos que não precisamos reiniciar aplicativos com nenhuma alteração no diretório src. Por exemplo, gostaríamos de ignorar as alterações no subdiretório src / Migrations. Nesse caso, você pode usar a opção --ignore:
php-watcher public/index.php --watch src --watch config --ext php,yaml --ignore Migrations
Agora, o PHP-Watcher começará a rastrear alterações nos diretórios src e config, mas ignorará quaisquer alterações dentro do subdiretório Migrations. Além disso, por padrão, ignora as alterações em todos os arquivos de ponto e VCS.
O Watcher suporta a personalização de seu comportamento não apenas por meio de opções de linha de comando, mas também por meio de arquivos de configuração. Se você não deseja transmitir várias opções e parâmetros todas as vezes na linha de comando, é possível criar um arquivo de configuração .php-watcher.yml. Por exemplo, o comando anterior pode ser substituído pelo seguinte arquivo de configuração:
watch: - src - config extensions: - php - yaml ignore: - Migrations
Tendo esse arquivo, podemos simplesmente ativar o "watch" especificando apenas o script PHP que precisa ser reiniciado. Todas as outras configurações serão obtidas do arquivo:
php-watcher public/index.php
O que acontece se tivermos um arquivo de configuração e argumentos de linha de comando? Nesse caso, todos os argumentos passados da linha de comando substituirão os valores correspondentes do arquivo de configuração.
Por padrão, o PHP-Watcher usa o executável PHP para executar o script. Escrevemos o comando no terminal:
php-watcher public/index.php
Sob o capô, um processo filho é criado com o comando php public / index.php. Na maioria dos casos, é disso que você precisa. No entanto, se o seu ambiente tiver um arquivo executável diferente, você poderá especificar explicitamente qual comando executar. Por exemplo, quando temos várias versões do PHP no mesmo sistema e queremos executar nosso aplicativo com o executável php7.4, você pode usar a opção --exec e especificar seu executável:
php-watcher public/index.php --exec php7.4
A mesma coisa através do arquivo de configuração:
watch: - src - config executable: php7.4
O PHP-Watcher não reinicia automaticamente o aplicativo se ele falhar. No ambiente de desenvolvimento, isso não é particularmente necessário - porque enquanto estamos desenvolvendo um novo aplicativo, é normal que algumas vezes ele travar. Se o aplicativo falhar (terminado com um código diferente de 0), o "relógio" nos informará sobre ele. Assim que corrigirmos o código, as alterações serão detectadas nas fontes - e o aplicativo será reiniciado.
Obrigado pela atenção! Mais informações sobre o PHP-Watcher podem ser encontradas na
página inicial do projeto no GitHub . A documentação descreve os padrões básicos de uso. O projeto ainda está em desenvolvimento, mas a API já é bastante estável. Ficarei feliz se você usá-lo.
PS Sinta-se livre para deixar comentários e sugestões através da edição no GitHub.