Files
laralog/scripts/dev-watch.sh
T
ak 88bba6eba3 feat: 开发期 workerman 热重载脚本(dev:watch)
- 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 手动部署
2026-08-12 01:54:22 +08:00

28 lines
1.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 开发期热重载:监听代码目录变化,自动重启 workerman:serve。
# 优先用 fswatchbrew 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 "未安装 fswatchbrew install fswatch 可升级体验),使用 PHP 轮询兜底..."
php scripts/dev-watch.php
fi