通過 PHPStorm 配置 Hyperf 熱更新開發環境

huangzhhui發表於2020-01-03

在開發 Hyperf/Swoole 這樣的持久化應用時,每當應用程式碼發生了變更時,都需要重啟應用使程式碼生效,儘管在開發 CLI 應用時這也是一個正確且合理地操作,因為我們開發過程中仍需要關注 stdout 輸出的資訊以判斷應用的執行狀態與結果。但這跟我們原來開發 PHP-FPM 應用的習慣有很大的差異,如果我們希望保持像 PHP-FPM 下的開發習慣,儲存程式碼即生效的話,都能怎麼做呢?
根據「Hyperf 官方文件 - 協程元件庫」一章內的介紹,有幾款第三方工具可以提供該功能的支援,但如果我們使用的是 PHPStorm 來進行開發,那麼我們可以直接通過 PHPStorm 裡面的 FileWatcher 來實現該功能。
實現的原理就是通過 FileWatcher 來監聽專案下的檔案變更,然後執行一個 shell 指令碼,通過這個 shell 指令碼來進行應用的重啟工作。

首先我們先在 skeleton 的 bin 目錄下建立一個 reload.sh 檔案,並寫入以下 Shell 程式碼:

#!/bin/bash
basepath=$(cd `dirname $0`; pwd)
cd $basepath
if [ -f "../runtime/hyperf.pid" ];then
cat ../runtime/hyperf.pid | awk '{print $1}' | xargs kill -9 && rm -rf ../runtime/hyperf.pid && rm -rf ../runtime/container
fi
php hyperf.php start

這裡的 shell 指令碼所做的事情就是判斷 ./runtime/hyperf.pid 檔案是否存在,如果存在則根據這個 pid 檔案來 kill 掉已執行的應用,並刪除掉這個 pid 檔案,隨後通過執行 php bin/hyperf.php start 命令來啟動應用

由於設定了熱更新,那我們也需要把應用設定為守護程式執行,在 Hyperf 裡可以通過在 config/autoload/server.phpsettings 中增加 daemonize 並設定為 true,參考配置如下:

<?php
// 這裡省略了其它配置
return [
    'settings' => [
        'daemonize' => 1,
    ],
];

接下來我們在 PHPStorm 中配置 FileWatcher 的規則,通過 Preferences -> Tools -> File Watchers 進入配置頁面,然後點選底部的 + 新增一個配置,參考配置如下:

Name: php
File Type: PHP
Scope: Project Files
Program: sh
Arguments: $ProjectFileDir$/bin/reload.sh
Show Console: Always

通過 PHPStorm 配置 Hyperf 熱更新開發環境

然後在列表我們要再將我們剛才建立的 watcher 勾選為 enabled

通過 PHPStorm 配置 Hyperf 熱更新開發環境

至此,我們便完成了所有的配置,此時我們僅需通過 sh bin/reload.php 命令來啟動應用,隨後更改檔案我們便會在 IDE 上看到如下的 output 視窗輸出重啟的資訊了。

通過 PHPStorm 配置 Hyperf 熱更新開發環境

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章