본문 바로가기

개발이야기

Next.js PWA 찍먹

최근에 pwa를 주제로 프로젝트를 하게 되었는데 pwa에 대해서 알아보기도 하고 next-pwa도 한번 써보고 싶어서 찍먹을 해보기로 하였다.

 

우선 create-next-app 을 이용해서 next-app을 만든다.

 

npx create-next-app next-pwa

 

이후에 next-pwa를 설치해준다.

 

yarn add next-pwa

 

이후에 512x512 그리고 192x192아이콘을 public 디렉토리에 넣어준다.

다음은 manifest파일을 public 디렉토리에 작성해 주는 것이다. 크롬 확장 프로그램을 만들 때도 이 파일을 작성했었는데, PWA에서 마찬가지이다.


{
  "name": "Next PWA demo",
  "short_name": "Next PWA",
  "icons": [
    {
      "src": "/icon.png",
      "sizes": "192x192",
      "type": "image/png"
    },

    {
      "src": "/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "theme_color": "#FFFFFF",
  "background_color": "#FFFFFF",
  "start_url": "/",
  "display": "standalone",
  "orientation": "portrait"
}

이제 _document.js 파일을 만들어서 아래 내용을 붙여넣는다.

import Document, { Html, Head, Main, NextScript } from "next/document";

class MyDocument extends Document {
  render() {
    return (
      <Html>
        <Head>
          <link rel="manifest" href="/manifest.json" />
          <link rel="apple-touch-icon" href="/icon.png"></link>
          <meta name="theme-color" content="#fff" />
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;

마지막으로 next.config.js 파일을 아래와 같이 수정한다.

const withPWA = require("next-pwa");

module.exports = withPWA({
  pwa: {
    dest: "public",
    register: true,
    skipWaiting: true,
  },
});

이후 yarn dev로 앱을 실행시켜주고 위에 다운로드 버튼을 누르면 아래와 같이 나올 것이다.

 

 

크롬 라이트하우스에서도 확인 할 수 있다.