#!/bin/sh # 构建 WebUI 资源,供 go:embed 使用。 # # FlyonUI 的样式必须在构建期由 Tailwind 生成(官方不支持 CDN 方式), # 因此这一步需要 Node。产物会提交进仓库,使用者无需 Node 环境。 set -e HERE=$(cd "$(dirname "$0")/.." && pwd) OUT="$HERE/internal/webui/dist" PROXY="${PROXY:-http://127.0.0.1:10808}" NODE_IMAGE="${NODE_IMAGE:-docker.io/library/node:20-alpine}" # Tailwind 不会创建输出目录,必须先建好。 mkdir -p "$OUT" if command -v npx >/dev/null 2>&1; then echo "使用本机 Node 构建" cd "$HERE/web" [ -d node_modules ] || npm install --no-fund --no-audit npx @tailwindcss/cli -i src/input.css -o "$OUT/app.css" --minify else echo "本机无 Node,改用容器构建($NODE_IMAGE)" # 挂载整个项目根目录,使容器内的输出路径与宿主一致。 podman run --rm --pull=never --network=host \ -e http_proxy="$PROXY" -e https_proxy="$PROXY" \ -v "$HERE":/app -w /app/web "$NODE_IMAGE" \ sh -c ' set -e [ -d node_modules ] || npm install --no-fund --no-audit >/dev/null 2>&1 npx @tailwindcss/cli -i src/input.css -o /app/internal/webui/dist/app.css --minify ' fi # 拷贝静态资源;FlyonUI 的 JS 提供 tabs / modal 等交互组件。 cp -f "$HERE/web/src/index.html" "$OUT/index.html" cp -f "$HERE/web/src/app.js" "$OUT/app.js" cp -f "$HERE/web/node_modules/flyonui/flyonui.js" "$OUT/flyonui.js" echo "WebUI 资源已生成于 internal/webui/dist" ls -la "$OUT"