- scripts/dev-watch.sh:优先 fswatch(brew install fswatch),未安装自动回退 PHP 轮询;监听 app/plugins/routes/config/.env 的 php/json 变化 → 自动 workerman:serve restart - scripts/dev-watch.php:纯 PHP mtime 轮询兜底(跨平台,零依赖) - composer 增加 dev:watch 命令 - 实测:touch 配置触发自动重启,新代码生效;生产仍用 restart 手动部署
28 lines
1.1 KiB
Bash
Executable File
28 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 开发期热重载:监听代码目录变化,自动重启 workerman:serve。
|
||
# 优先用 fswatch(brew install fswatch),未安装时回退纯 PHP 轮询。
|
||
# 用法:php artisan dev:watch 或 bash scripts/dev-watch.sh
|
||
set -euo pipefail
|
||
cd "$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
||
WATCH_DIRS=(app plugins routes config)
|
||
WATCH_FILES=(.env)
|
||
WATCH_PATTERN='\.(php|json)$'
|
||
|
||
restart() {
|
||
echo "[$(date +%H:%M:%S)] 检测到代码变更,重启 workerman:serve..."
|
||
php artisan workerman:serve restart
|
||
}
|
||
|
||
if command -v fswatch >/dev/null 2>&1; then
|
||
echo "使用 fswatch 监听:${WATCH_DIRS[*]} ${WATCH_FILES[*]}(Ctrl+C 退出)"
|
||
args=()
|
||
for d in "${WATCH_DIRS[@]}"; do [ -d "$d" ] && args+=("$d"); done
|
||
for f in "${WATCH_FILES[@]}"; do [ -f "$f" ] && args+=("$f"); done
|
||
fswatch -0 -l 1 -r --include "$WATCH_PATTERN" --exclude '.*' "${args[@]}" \
|
||
| while IFS= read -r -d '' _; do restart; done
|
||
else
|
||
echo "未安装 fswatch(brew install fswatch 可升级体验),使用 PHP 轮询兜底..."
|
||
php scripts/dev-watch.php
|
||
fi
|