Skip to content

feat(studio): add PWA support (manifest + service worker)#413

Closed
dyjung150605 wants to merge 3 commits into
edwardkim:develfrom
dyjung150605:feature/pwa-support
Closed

feat(studio): add PWA support (manifest + service worker)#413
dyjung150605 wants to merge 3 commits into
edwardkim:develfrom
dyjung150605:feature/pwa-support

Conversation

@dyjung150605

Copy link
Copy Markdown
Contributor

개요

rhwp-studio를 브라우저에서 설치 가능한 Progressive Web App(PWA) 으로 만듭니다.
vite-plugin-pwa + Workbox를 사용하여 Web App Manifest와 Service Worker를 생성합니다.

closes #383


변경 파일

파일 내용
rhwp-studio/package.json vite-plugin-pwa@^1.2.0, workbox-window@^7.4.0 devDependency 추가
rhwp-studio/.npmrc legacy-peer-deps=true (vite-plugin-pwa@1.2.0의 peer가 vite≤7; vite@8 공식 지원 추가 시 제거)
rhwp-studio/vite.config.ts VitePWA 플러그인 설정: manifest, workbox, runtimeCaching
rhwp-studio/index.html theme-color meta, apple-touch-icon link 추가
rhwp-studio/public/icons/icon-{128,192,256,512}.png PWA 아이콘 (assets/logo/ 에서 복사/리사이즈)

메인테이너 점검 항목 대응

1. manifest 서브패스 정합
start_url: '/rhwp/', scope: '/rhwp/' — GitHub Pages 배포 경로(--base=/rhwp/)와 일치.

2. icon 사이즈
192×192 추가 (PWA 권장 표준). 구성: 128 / 192 / 256 / 512 + 512 maskable.

3. registerType 정책: autoUpdate 선택
rhwp-studio는 문서 편집기로 사용 도중 알림 팝업이 UX를 방해할 수 있어 autoUpdate를 택했습니다.
12 MB WASM은 precache 대상에서 분리(아래 참고)하여 SW 설치 자체는 빠르게 유지됩니다.
배포 주기가 짧거나 향후 의견이 있으면 prompt로 전환도 쉽습니다.

4. .npmrc 임시성 명시
파일 내에 "vite-plugin-pwa가 vite@8 공식 지원 추가 시 제거" 주석 포함.

5. WASM runtimeCaching 분리
WASM(~12 MB)을 globPatterns precache에서 제외하고 runtimeCaching: CacheFirst로 처리합니다.
→ SW 설치 단계에서 12 MB 다운로드를 강제하지 않음.
→ 첫 실제 로드 시 캐시되어 이후 오프라인에서도 사용 가능.

6. E2E 테스트 회귀
devOptions: { enabled: false } 설정으로 dev 서버에서는 SW가 비활성화됩니다.
기존 e2e 테스트(Playwright/puppeteer-core 기반)는 dev 서버를 대상으로 실행되어 SW와 충돌하지 않습니다.

7. deploy-pages.yml 무변경
rhwp-studio/.npmrcnpm install 시 자동 적용되어 워크플로우 수정 불필요.
fork(dyjung150605/rhwp) 배포로 사전 검증: https://dyjung150605.github.io/rhwp/


검증 환경

환경 PWA 설치 오프라인 비고
Windows / Chrome ✅ 주소창 ⊕ 설치 별도 창·작업표시줄 등록
Windows / Edge
macOS / Safari 홈 화면 추가
Android / Chrome 홈 화면 추가

참고: 향후 개선 가능 사항 (이 PR 범위 밖)

  • 아이콘 원본 SVG 제공 시 @vite-pwa/assets-generator로 전 사이즈 자동 생성 가능
  • start_url/scope를 빌드 시 env 주입 방식으로 변경하면 다른 base 경로에서도 재사용 가능

dyjung150605 and others added 2 commits April 28, 2026 15:17
- Add vite-plugin-pwa with autoUpdate strategy
- Generate manifest.json (name, icons 128/256/512, theme_color)
- Precache JS/CSS/HTML/WASM/PNG/fonts via workbox
- Add theme-color meta + apple-touch-icon to index.html
- Pin .npmrc legacy-peer-deps=true (vite-plugin-pwa peer is vite<=7)
- start_url/scope: '.' → '/rhwp/' (GitHub Pages subpath hardened)
- icon-192.png added (PWA standard 192×192 size)
- WASM removed from precache globPatterns → runtimeCaching CacheFirst
  (avoids 12 MB blocking SW installation; offline after first load)
- .npmrc: add comment noting legacy-peer-deps is temporary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 28, 2026
- PR #413 (rhwp-studio PWA support, @dyjung150605) 옵션 A cherry-pick 머지 완료
- 이슈 #383 메인테이너 안내 7항목 100% 대응
- 4 환경 + fork 배포 사전 검증
- 검토 / 처리 보고서 추가

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
edwardkim added a commit that referenced this pull request Apr 28, 2026
@edwardkim

Copy link
Copy Markdown
Owner

완료. `devel` 에 cherry-pick (작성자 attribution 보존) 으로 머지됨 (commit `a216bd5`).

이슈 #383 자동 close 됩니다 (PR 본문 `closes #383` 명시).

머지 commit

작성자 attribution 보존:

검증

평가

이슈 #383 의 메인테이너 안내 7항목 모두 100% 대응 — start_url/scope, icon 192+maskable, registerType=autoUpdate 사유, legacy-peer-deps 임시성, WASM runtimeCaching 분리, E2E devOptions=false, deploy-pages.yml 무변경. 4 환경 (Chrome/Edge/Safari/Android) + fork 배포 사전 검증까지 신중하게 진행해 주신 점이 양호합니다.

본 저장소 배포 PWA 동작 확인

머지 후 `deploy-pages.yml` 자동 트리거로 `https://edwardkim.github.io/rhwp/\` 배포가 갱신됩니다. PWA 설치 동작은 작업지시자가 본 저장소 배포에서 한 번 더 확인할 예정입니다.

좋은 기여 감사합니다. 첫 PR 환영합니다.

@edwardkim edwardkim closed this Apr 28, 2026
@dyjung150605

Copy link
Copy Markdown
Contributor Author

리뷰와 머지에 감사드립니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants