[React] Vite + TypeScript + PWA 프로젝트 생성하기

2024. 7. 30. 11:09·Library & Runtime/React

 

안녕하세요😀 싸피 11기 2학기가 시작한지 한 달이 다 되어 갑니다🍃

저희 팀 주제는 데스크탑보다 모바일에 적합할 거 같아 웹앱을 구현하기로 했는데요!

PWA 특징과 PWA를 쓰기 위한 세팅법을 알아보겠습니다.

 

📱 PWA

  • Progressive Web Apps
  • 모바일에서 네이티브 앱과 같은 사용자 경험을 제공하는 웹 앱
  • ex) Twitter Lite

특징

  • PWA는 웹처럼 개발하면 되지만 스마트폰에 네이티브 앱처럼 설치할 수 있고 앱처럼 보이고 동작한다.
  • 검색 엔진이 최적화되어있다. (SEO)
  • 백그라운드 기능이 네이티브 앱보다는 제한적이지만, 푸시 알림 정도는 가능하다.
  • 네이티브 앱에 비해 하드웨어 접근이 제한적이다.

저희 팀은 React를 써서 프로젝트를 진행할 계획이었는데 주제가 모바일에 적합해 PWA를 적용하게 되었습니다😊

 

🔧 환경 세팅

저는 yarn을 이용해서 환경 세팅을 했는데 npm을 쓰셔도 무방합니다.

1. vite 프로젝트 생성

yarn create vite

 

프로젝트명을 입력한 후, React와 TypeScript를 선택했습니다.

 

프로젝트 디렉토리로 이동해서 패키지를 설치한 뒤 프로젝트를 실행할 수 있습니다.

cd vite-project // 디렉토리 이동
yarn // 패키지 설치
yarn dev // 프로젝트 실행

 

2. PWA 세팅

manifest.json, sw.js 파일을 만들어줘야 합니다.

- manifest.json

앱에서 띄울 아이콘을 준비합니다. 아이콘 크기 변환 사이트에서 원하는 이미지를 넣으면 필요한 아이콘들을 얻을 수 있습니다. 준비한 아이콘들은 public/icons 폴더에 넣어주세요.

 

그 후 public 폴더 아래에 mainfest.json 파일을 생성합니다.

 

아래 코드를 복붙해서 name, short_name, background_color, theme_color, description을 프로젝트에 맞게 수정해주세요.

{
  "name": "Yeomyeong808",
  "short_name": "808",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#FFFFFF",
  "theme_color": "#FFF1A7",
  "description": "Kindergarten management services",
  "icons": [
    {
      "src": "icons/favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "icons/favicon-192x192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "icons/logo-512x512.png",
      "type": "image/png",
      "sizes": "512x512"
    },
    {
      "src": "icons/logo-512x512.png",
      "type": "image/png",
      "sizes": "512x512",
      "purpose": "any maskable"
    }
  ]
}

 

루트 디렉토리에 sw.js 파일을 생성하여 Service Worker 코드를 작성해주세요.

아래 코드를 바탕으로 필요에 따라 수정하시면 됩니다!

// install event
self.addEventListener('install', (e) => {
  console.log('[Service Worker] installed')
})

// activate event
self.addEventListener('activate', (e) => {
  console.log('[Service Worker] actived', e)
})

// fetch event
self.addEventListener('fetch', (e) => {
  console.log('[Service Worker] fetched resource ' + e.request.url)
})

 

index.html 파일도 수정합니다. 메타 정보와 sw.js를 불러오는 스크립트를 추가했습니다.

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8" />
    <meta name="theme-color" content="#FFF1A7" />
    <link rel="icon" href="icons/favicon-196x196.png" type="image/png" />
    <link rel="alternate icon" href="/favicon.ico" type="ico" sizes="16x16" />
    <link
      rel="apple-touch-icon"
      href="icons/apple-touch-icon-152x152.png"
      sizes="180x180"
    />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="manifest" href="/manifest.json" />
    <title>Vite Typescript React PWA</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
    <script>
      if ('serviceWorker' in navigator) {
        // Register a service worker hosted at the root of the
        // site using the default scope.
        navigator.serviceWorker
          .register('/sw.js')
          .then((registration) => {
            console.log('Service worker registration succeeded:', registration)
          })
          .catch((err) => {
            console.log('Service worker registration failed:', error)
          })
      } else {
        console.log('Service workers are not supported.')
      }
    </script>
  </body>
</html>

 

여기까지 왔으면 기본적인 준비가 완료되었습니다!

 

📺 프로젝트 실행

아래 버튼이 정상적으로 뜨면 됩니다!

 

위 버튼을 눌러보면 아래처럼 뜨는 걸 확인하실 수 있어요~!

 

 

[참고] https://velog.io/@boorook/Vite-React-TypeScript-PWA-%EB%A7%8C%EB%93%A4%EA%B8%B0-AWS-Amplify-%EB%B0%B0%ED%8F%AC

 


 

그럼 다들 2학기 프로젝트도 빠이팅하세요!!✊✊

 

반응형

'Library & Runtime > React' 카테고리의 다른 글

camelCase 요청 데이터를 snake_case로 변환하기  (0) 2024.11.05
snake_case 응답 데이터를 camelCase로 변환하기  (0) 2024.11.04
[React] React Router 총정리  (0) 2024.08.26
[React] React Quill 사용하기 & HTML 렌더링하기  (0) 2024.08.21
'Library & Runtime/React' 카테고리의 다른 글
  • camelCase 요청 데이터를 snake_case로 변환하기
  • snake_case 응답 데이터를 camelCase로 변환하기
  • [React] React Router 총정리
  • [React] React Quill 사용하기 & HTML 렌더링하기
올콩
올콩
콩 심은 데 콩 난다
  • 올콩
    콩스토리
    올콩
  • 전체
    오늘
    어제
    • 분류 전체보기 (145) N
      • SSAFY (10)
      • Algorithm (71)
        • 이론 (5)
        • 백준 (BOJ) (65)
        • 프로그래머스 (1)
      • Language (9)
        • JavaScript (0)
        • TypeScript (0)
        • Java (9)
        • Python (0)
      • Library & Runtime (15)
        • React (13)
        • Node.js (2)
      • Framework (9)
        • 이론 (2)
        • Next.js (3)
        • Vue (4)
      • DevOps (3)
        • Git (3)
      • WEB (18) N
        • HTML (9)
        • error (7) N
        • etc (2)
      • Computer (5)
        • 자격증 (2)
        • tip (2)
        • etc (1)
      • CS (5)
        • Network (1)
        • Blockchain (4)
  • 블로그 메뉴

    • GitHub
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    렌더링최적화
    Next.js
    Error
    딕셔너리
    싸피
    React
    해시
    kakaomap
    dfs
    파이썬
    DP
    Algorithm
    vue
    티스토리챌린지
    블록체인
    우선순위큐
    SSAFYcial
    github
    알고리즘
    오블완
    누적합
    재귀
    강의
    html5
    자바
    bfs
    백준
    카카오맵
    Java
    SSAFY
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
올콩
[React] Vite + TypeScript + PWA 프로젝트 생성하기
상단으로

티스토리툴바