#!/usr/bin/env bash # StationPlayer 포터블(로컬 단독 실행) 패키지 빌드 # 산출물: dist-portable/StationPlayer-Portable/ # node.exe — Windows 포터블 런타임 (호스트 설치본 복사) # server.cjs — 경량 서버 단일 번들 (demo.ts) # client/ — 클라이언트 정적 빌드 # StationPlayer.bat — 더블클릭 실행 (서버 시작 + 브라우저 오픈) # README.txt # 사용: source ~/.nvm/nvm.sh && nvm use 20 && bash scripts/build-portable.sh set -euo pipefail cd "$(dirname "$0")/.." OUT="dist-portable/StationPlayer-Portable" NODE_EXE="/mnt/c/Program Files/nodejs/node.exe" echo "[1/5] 클라이언트 빌드" npm run build -w client echo "[2/5] 경량 서버 번들 (esbuild)" rm -rf "$OUT" mkdir -p "$OUT" # --minify: 고객 배포용 — 식별자·공백 압축(소스 비공개 수준을 클라이언트와 동일하게) npx --yes esbuild server/src/demo.ts \ --bundle --minify --platform=node --target=node18 --format=cjs \ --outfile="$OUT/server.cjs" --log-level=warning echo "[3/5] 클라이언트 복사" cp -r client/dist "$OUT/client" echo "[4/5] node.exe 복사" if [ -f "$NODE_EXE" ]; then cp "$NODE_EXE" "$OUT/node.exe" else echo " 경고: $NODE_EXE 없음 — node.exe 를 수동으로 넣어주세요 (nodejs.org 'Windows Binary')" fi echo "[5/5] 실행 스크립트/README 생성" python3 - "$OUT" <<'EOF' import sys, os out = sys.argv[1] bat = "\r\n".join([ "@echo off", "chcp 65001 > nul", "cd /d %~dp0", "echo StationPlayer 서버 시작 - http://localhost:54000 (이 창을 닫으면 종료)", 'start "" http://localhost:54000', "node.exe server.cjs", "pause", "", ]) open(os.path.join(out, "StationPlayer.bat"), "w", encoding="utf-8").write(bat) readme = "\r\n".join([ "StationPlayer 포터블 — 스테이션 기반 동영상 플레이어 (로컬 단독 실행)", "", "실행 방법:", " 1) 이 폴더 전체를 아무 위치(USB/바탕화면 등)에 복사", " 2) StationPlayer.bat 더블클릭", " 3) 브라우저가 열리면 [폴더 선택]으로 영상 데이터 폴더 지정", "", "요구사항: Windows 10/11 + 크롬/엣지 브라우저 (설치 불필요, Node.js 포함됨)", "포트: 54000 (사용 중이면 StationPlayer.bat 의 PORT 수정)", "종료: 검은 콘솔 창 닫기", "", ]) open(os.path.join(out, "README.txt"), "w", encoding="utf-8-sig").write(readme) print(" StationPlayer.bat / README.txt 생성") EOF echo "완료: $OUT" du -sh "$OUT" 2>/dev/null | awk '{print "총 크기: " $1}'