# λ·° 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"
}
β Data Fetching π Workbox β