# λ·° CLI의 PWA ν”ŒλŸ¬κ·ΈμΈ

λ·° CLIμ—μ„œ μ œκ³΅ν•˜λŠ” ν”„λ‘œκ·Έλ ˆμ‹œλΈŒ μ›Ή μ•±(Progressive Web Apps: PWA) ν”ŒλŸ¬κ·ΈμΈμ€ κ΅¬κΈ€μ˜ μ›Œν¬ λ°•μŠ€(Workbox) (opens new window) 라이브러리λ₯Ό 기반으둜 κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ·° CLI의 PWA ν”ŒλŸ¬κ·ΈμΈ νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • ν”ŒλŸ¬κ·ΈμΈμ—μ„œ λ‹€λ£¨λŠ” μ„œλΉ„μŠ€ μ›Œμ»€ νŒŒμΌμ€ ν”„λ‘œλ•μ…˜ λͺ¨λ“œ(npm run build)μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  • μ„œλΉ„μŠ€μ›Œμ»€ νŒŒμΌμ„ λ‘œμ»¬μ—μ„œ ν…ŒμŠ€νŠΈ ν•˜λŠ” 경우 npm λΉŒλ“œ ν›„ serve (opens new window)와 같은 HTTP μ„œλ²„λ‘œ μ‹€ν–‰

# PWA κ΄€λ ¨ μ„€μ • 방법

λ·° CLI의 PWA ν”ŒλŸ¬κ·ΈμΈμ—μ„œ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯μ΄λ‚˜ 섀정을 λ³€κ²½ν•˜κ³  μ‹Άλ‹€λ©΄ λ‹€μŒ λ‘˜ 쀑 ν•œ 개의 νŒŒμΌμ„ λ³€κ²½ν•©λ‹ˆλ‹€.

  • vue.config.js
  • package.json의 vue 속성

# PWA ν”ŒλŸ¬κ·ΈμΈμ—μ„œ μ œκ³΅ν•˜λŠ” μ„€μ •

PWA ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ μ„€μ •ν•  수 μžˆλŠ” μ˜΅μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

# pwa.workboxPluginMode

μ›Œν¬ λ°•μŠ€μ˜ μ›ΉνŒ© ν”ŒλŸ¬κ·ΈμΈ (opens new window)에 μ˜ν•΄ λ‹€μŒ 2가지 λͺ¨λ“œκ°€ μ§€μ›λ©λ‹ˆλ‹€.

  • GenerateSW : κΈ°λ³Έ κ°’. μƒˆλ‘œ λΉŒλ“œν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μ„œλΉ„μŠ€μ›Œμ»€ 파일 생성
  • InjectManifest : ν”„λ‘œμ νŠΈ μ•ˆμ— μ„œλΉ„μŠ€ μ›Œμ»€ 파일이 μžˆλŠ” 경우 프리 캐싱(Precaching)된 μ½”λ“œλ₯Ό μΆ”κ°€ν•˜μ—¬ μ‚¬μš© κ°€λŠ₯. μ›Ή ν‘Έμ‹œμ™€ 같은 기타 μ„œλΉ„μŠ€ μ›Œμ»€ κΈ°λŠ₯을 μ‚¬μš©ν•  λ•Œ 유용

TIP

각 λͺ¨λ“œμ— λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ³  μ‹Άλ‹€λ©΄ λ‹€μŒ 링크λ₯Ό μ°Έκ³ ν•˜μ„Έμš”. μ›Œν¬λ°•μŠ€ ν”ŒλŸ¬κ·ΈμΈ λͺ¨λ“œ (opens new window)

# pwa.workboxOptions

μ›Œν¬λ°•μŠ€ μ›ΉνŒ© ν”ŒλŸ¬κ·ΈμΈ (opens new window)μ—μ„œ μ§€μ›ν•˜λŠ” 속성 μ˜΅μ…˜κ³Ό λ™μΌν•˜κ²Œ μ§€μ›λ©λ‹ˆλ‹€. ex) swSrc, skipWaiting λ“±

# pwa.iconPaths

PWA μ•„μ΄μ½˜ 경둜λ₯Ό μ„€μ •ν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€. κΈ°λ³Έ 값은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

{
  "favicon32": "img/icons/favicon-32x32.png",
  "favicon16": "img/icons/favicon-16x16.png",
  "appleTouchIcon": "img/icons/apple-touch-icon-152x152.png",
  "maskIcon": "img/icons/safari-pinned-tab.svg",
  "msTileImage": "img/icons/msapplication-icon-144x144.png"
}