PHP-Watcher: alat yang menyederhanakan pengembangan aplikasi berumur panjang



Kami menyukai PHP karena kesederhanaannya: Anda menulis kode, menyegarkan halaman di browser dan segera melihat perubahannya. Tetapi jika itu menyangkut perintah konsol, yang bisa menjadi proses yang berumur panjang - misalnya, jika kita menulis server HTTP asinkron untuk mengunggah file - pengembangan bisa sangat menyakitkan.

Tidak ada solusi yang sesuai di ekosistem PHP untuk secara otomatis me-restart aplikasi ketika perubahan dilakukan pada kode sumber. Oleh karena itu, saya memutuskan untuk membuat alat saya - dalam PHP murni dan dengan akses melalui Komposer.

Ini seperti Nodemon, tetapi dalam PHP


Untuk sementara saya sendiri menggunakan Nodemon . Ini adalah alat dari dunia Node.js, namun, jika Anda menyesuaikannya sedikit, Anda dapat menggunakannya dengan skrip PHP. Tetapi pada kenyataannya, saya tidak ingin menginstal Node.js dan menyeret banyak paket NPM yang tidak saya ketahui ke dalam aplikasi PHP asinkron saya untuk memulai kembali.

Karena saya aktif berkomunikasi di Twitter, saya bertanya di sana siapa lagi yang memiliki masalah ini dan ingin mendapatkan solusi. Melihat minat, saya duduk untuk menulis alat yang menyediakan fungsi yang sama seperti Nodemon, hanya dalam PHP dan untuk PHP .



Satu bulan telah berlalu: dengan PHP-Watcher Anda tidak perlu lagi menginstal Nodemon atau paket NPM lainnya untuk mengembangkan aplikasi PHP Anda yang berumur panjang.

Begitulah cara kerjanya


Perpustakaan dapat diinstal melalui Komposer:

composer global require seregazhuk/php-watcher 

Bayangkan kita sedang mengerjakan aplikasi berbasis Symfony yang berumur panjang. Titik masuk ke aplikasi kita adalah file public / index.php. Kami ingin melacak perubahan di folder src dan config. Kami juga ingin aplikasi restart secara otomatis segera setelah kami mengubah kode sumber atau parameter konfigurasi. Inilah cara mengatasi masalah ini:

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

Perintah akan menjalankan skrip public / index.php, yang akan mulai melacak perubahan di direktori src dan config. Segera setelah file berubah di dalamnya, PHP-Watcher akan memulai kembali skrip.

Secara default, ini hanya melacak perubahan ke file PHP. Tetapi Symfony menyimpan konfigurasinya di yaml. Karena itu, kita perlu memberi tahu jam tangan secara eksplisit agar dapat melacak file PHP dan yaml. Ini dilakukan dengan menggunakan opsi --ext:

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

Misalkan kita mengerti bahwa kita tidak perlu me-restart aplikasi dengan perubahan apa pun dalam direktori src. Sebagai contoh, kami ingin mengabaikan perubahan di subdirektori src / Migrations. Dalam hal ini, Anda dapat menggunakan opsi --ignore:

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

Sekarang PHP-Watcher akan mulai melacak perubahan di direktori src dan config, tetapi akan mengabaikan perubahan apa pun di dalam subdirektori Migrasi. Selain itu, secara default mengabaikan perubahan dalam semua file dot dan VCS.

Watcher mendukung penyesuaian perilakunya tidak hanya melalui opsi baris perintah, tetapi juga melalui file konfigurasi. Jika Anda tidak ingin meneruskan banyak opsi dan parameter setiap kali pada baris perintah, Anda dapat membuat file konfigurasi .php-watcher.yml. Misalnya, perintah sebelumnya dapat diganti dengan file konfigurasi berikut:

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

Memiliki file seperti itu, kita cukup mengaktifkan "arloji" dengan menentukan hanya skrip PHP yang perlu dimulai ulang. Semua pengaturan lain akan diambil dari file:

 php-watcher public/index.php 

Apa yang terjadi jika kita memiliki file konfigurasi dan argumen baris perintah? Dalam hal ini, semua argumen yang dilewatkan dari baris perintah akan menimpa nilai yang sesuai dari file konfigurasi.

Secara default, PHP-Watcher menggunakan PHP yang dapat dieksekusi untuk menjalankan skrip. Kami menulis perintah di terminal:

 php-watcher public/index.php 

Di bawah tenda, proses anak dibuat dengan perintah php public / index.php. Dalam kebanyakan kasus, inilah yang Anda butuhkan. Namun, jika lingkungan Anda memiliki file yang dapat dieksekusi yang berbeda, Anda dapat secara eksplisit menentukan perintah yang harus dijalankan. Misalnya, ketika kami memiliki beberapa versi PHP pada sistem yang sama, dan kami ingin menjalankan aplikasi kami dengan php7.4 yang dapat dieksekusi, Anda dapat menggunakan opsi --exec dan menentukan file yang dapat Anda eksekusi:

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

Hal yang sama melalui file konfigurasi:

 watch: - src - config executable: php7.4 

PHP-Watcher tidak secara otomatis me-restart aplikasi jika crash. Dalam lingkungan dev, ini tidak terlalu diperlukan - karena ketika kami sedang mengembangkan aplikasi baru, itu normal bahwa kadang-kadang akan crash. Jika aplikasi macet (diakhiri dengan kode selain 0), "arloji" akan memberi tahu kami tentang hal itu. Segera setelah kami memperbaiki kode, perubahan akan terdeteksi di sumber - dan aplikasi akan memulai kembali.

Terima kasih atas perhatian anda! Informasi lebih lanjut tentang PHP-Watcher dapat ditemukan di beranda proyek di GitHub . Dokumentasi menjelaskan pola dasar penggunaan. Proyek ini masih dalam pengembangan, tetapi API sudah cukup stabil. Saya akan senang jika Anda menggunakannya.

PS Jangan ragu untuk meninggalkan umpan balik dan saran melalui masalah di GitHub.

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


All Articles