背景: - dev.sh 会把仓库根 .env 的变量全部导出给子进程,其中 VITE_PUBLIC_DEMO_SESSION=true 被 Vite 读取后启用演示会话:登录写入 假 token,进入 /users 后真实接口 401、刷新失败即清会话回登录页; - 后台启动后终端看不到运行日志,不利于排查。 改动: - dev.sh 不再向子进程导出 VITE_*,前端环境仍由 Vite 自己管理; - .env.example 的 VITE_PUBLIC_DEMO_SESSION 默认改为 false(本地 .env / .env.local 同步); - ./dev.sh 默认启动后前台跟随日志(Ctrl+C 停止全部),新增 -d/--detach 后台模式;非交互环境仍默认后台; - README 同步脚本用法。 影响面: - 仅开发脚本与示例环境;生产与 CI 不涉及;演示会话仍可通过显式 VITE_PUBLIC_DEMO_SESSION=true 开启。 回滚方式: - 回滚本提交即恢复后台启动与 VITE_* 透传行为。 验证证据: - 浏览器登录会真实请求 POST /api/v1/auth/login,错误账号返回 「账号或密码不正确」; - 真实账号登录后停留在 /users 并加载 9 条成员,不再回跳登录页; - ./dev.sh -f 持续输出 api/web/worker 日志,SIGTERM 后服务与端口 全部释放; - bash -n dev.sh 与 pnpm format:check 通过。
This commit is contained in:
1 parent
4f8f7c587d
commit
2c8dd5040f
3 files changed
+23
-6
No files matched your search
@@ -49,7 +49,8 @@ WORKER_FILTER="@lingxi/worker"
|
||||
# shellcheck disable=SC2034
|
||||
COMMAND="start"
|
||||
SERVICES=("api" "web" "worker")
|
||||
FOLLOW=0
|
||||
# auto:终端下启动后直接跟随日志;非交互(脚本/CI)默认后台
|
||||
FOLLOW="auto"
|
||||
AUTO_KILL=1
|
||||
|
||||
# ---------- 输出 ----------
|
||||
@@ -71,8 +72,9 @@ usage() {
|
||||
灵犀 · 开发机服务启动脚本(不启动 DB / Redis 容器)
|
||||
|
||||
用法:
|
||||
./dev.sh 启动(默认 api + web + worker)
|
||||
./dev.sh 启动服务并前台跟随运行日志(Ctrl+C 停止全部)
|
||||
./dev.sh start 同上
|
||||
./dev.sh start -d 后台启动,立即返回
|
||||
./dev.sh stop 停止全部服务并释放端口
|
||||
./dev.sh restart 重启
|
||||
./dev.sh status 查看端口、PID 与健康状态
|
||||
@@ -83,7 +85,8 @@ usage() {
|
||||
--api-only 只启动 api
|
||||
--web-only 只启动 web
|
||||
--no-worker 不启动 worker
|
||||
--follow, -f 启动后前台跟踪日志,Ctrl+C 停止全部
|
||||
-d, --detach 后台启动,不跟随日志
|
||||
-f, --follow 强制前台跟随日志(默认在终端下开启)
|
||||
--no-kill 端口占用时不自动结束,直接报错退出
|
||||
-h, --help 显示帮助
|
||||
|
||||
@@ -130,6 +133,8 @@ parse_args() {
|
||||
;;
|
||||
--follow|-f)
|
||||
FOLLOW=1; shift ;;
|
||||
-d|--detach)
|
||||
FOLLOW=0; shift ;;
|
||||
--no-kill)
|
||||
AUTO_KILL=0; shift ;;
|
||||
-h|--help)
|
||||
@@ -301,6 +306,8 @@ load_env_files() {
|
||||
value="${value%\"}"
|
||||
value="${value#\'}"
|
||||
value="${value%\'}"
|
||||
# VITE_* 交给前端自己的 envDir 处理,避免覆盖 Vite 的构建/运行配置
|
||||
case "$key" in VITE_*) continue ;; esac
|
||||
# shell 里已有的变量优先,不覆盖
|
||||
if [[ -z "${!key:-}" ]]; then
|
||||
export "$key=$value"
|
||||
@@ -490,12 +497,18 @@ start_services() {
|
||||
local files=()
|
||||
for service in "${SERVICES[@]}"; do files+=("$(svc_log "$service")"); done
|
||||
sleep 0.3
|
||||
printf '\n'
|
||||
dim "以下为运行日志,按 Ctrl+C 停止全部服务"
|
||||
printf '\n'
|
||||
# 后台 tail + wait:前台 tail 会阻塞信号 trap,导致 Ctrl+C 不生效
|
||||
tail -n 20 -F "${files[@]}" &
|
||||
TAIL_PID=$!
|
||||
trap cleanup_follow INT TERM
|
||||
wait "$TAIL_PID" || true
|
||||
stop_services
|
||||
else
|
||||
printf '\n'
|
||||
dim "后台运行中:./dev.sh logs 查看日志,./dev.sh stop 停止服务"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -568,6 +581,9 @@ clean_state() {
|
||||
|
||||
# ---------- 主流程 ----------
|
||||
parse_args "$@"
|
||||
if [[ "$FOLLOW" == "auto" ]]; then
|
||||
if [[ -t 1 ]]; then FOLLOW=1; else FOLLOW=0; fi
|
||||
fi
|
||||
load_env_files
|
||||
resolve_ports
|
||||
|
||||
|
||||
Reference in new issue
Block a user