#!/usr/bin/env bash # 由 index.template.html 生成可上传的 index.html:把 App 图标内联成 data URI。 # # 为什么内联而不是放一个 icon.png 在旁边:这页只有一个文件要上传, # 少一个文件就少一种「漏传了导致图标裂开」的失败形态,也少一次请求。 # 代价是 index.html 会大几十 KB —— 对一个要发 60MB 安装包的页面无所谓。 # # App 图标换了就重跑本脚本,再把 index.html 传一次。 set -euo pipefail cd "$(dirname "$0")" SRC="../../apps/client/assets/images/app_icon.png" # App 图标的唯一来源,与客户端同一份素材 SIZE=192 # 展示 92px,@2x 够用;再大只是徒增体积 [ -f "$SRC" ] || { echo "✗ 找不到 App 图标: $SRC" >&2; exit 1; } TMP="$(mktemp -d)"; trap 'rm -rf "$TMP"' EXIT sips -Z "$SIZE" "$SRC" --out "$TMP/icon.png" >/dev/null B64="$(base64 -i "$TMP/icon.png" | tr -d '\n')" # 用 python 替换:图标 base64 有几万字符,sed 在这个量级上会报 "RE error" python3 - "$B64" <<'PY' import sys b64 = sys.argv[1] src = open('index.template.html').read() out = src.replace('__ICON_DATA_URI__', 'data:image/png;base64,' + b64) assert '__ICON_DATA_URI__' not in out, '占位符没替换干净' open('index.html', 'w').write(out) PY printf "✓ 已生成 index.html(%s KB)\n" "$(( $(stat -f%z index.html) / 1024 ))"