快速了解Vite PWA
前情提要
通常開發一個專案,都是依據開發需求來決定所運用的技術,而從零到有生成一個APP也是一樣,還需要針對不同的作業系統做開發上的調整,而後續維護也是一個問題,因此有些公司會選擇使用PWA(Progressive Web Application)來做替代方式,雖然他功能受到限制,但對於不想花太多時間開發的人會是個好選擇。 而在玩Vite的過程中發現到Vite PWA這個插件的便利性,今天讓我們來花一點時間玩看看吧。
Vite PWA
- 如果是從新的專案開始的人,可以直接create一個包含PWA範例的專案來實作。
1
$ npm create @vite-pwa/pwa@latest my-vue-app -- --template vue
- 而我是從舊有專案來實作,那就直接安裝vite-plugin-pwa
1
$ npm install -D vite-plugin-pwa
配置vite config
- 首先要去撰寫PWA的基本資訊,而現在有很多輔助的網站可以幫忙生成manifest文件,這邊推薦一個網站來添加Favicon
- 由於使用Vite PWA的關係,原先要寫在manifest.json的內容就可以在這邊統一去管理,而用來調度取得資料來源的Service Worker,它直接使用chrome的workbox做使用,而關於快取策略可以決定資料來源的優先級,幫助你在不同的情境作出相對的設定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
import { VitePWA } from 'vite-plugin-pwa' export default defineConfig({ plugins: [ VitePWA({ registerType: 'autoUpdate', /// 讓dev環境可以測試SW功能 devOptions: { enabled: true, type: 'module', navigateFallback: 'index.html', suppressWarnings: true }, manifest: { name: 'todoListEX', short_name: 'todoListEX', theme_color: '#070809', background_color: '#070809', display: 'standalone', scope: '/', start_url: '/', icons: [ { purpose: 'maskable', src: '/src/assets/icons/"icon512_maskable.png', sizes: '512x512', type: 'image/png' }, { purpose: 'any', src: '/src/assets/icons/icon512_rounded.png', sizes: '512x512', type: 'image/png' } ] } workbox: { runtimeCaching: [ { urlPattern: /someInterface/i, // 接口緩存 handler: 'CacheFirst', options: { cacheName: 'interface-cache' } }, { urlPattern: /(.*?)\.(js|css|ts)/, // 靜態資源緩存 handler: 'CacheFirst', options: { cacheName: 'js-css-cache' } }, { urlPattern: /(.*?)\.(png|jpe?g|svg|gif|bmp|psd|tiff|tga|eps)/, // 圖片緩存 handler: 'CacheFirst', options: { cacheName: 'image-cache' } } ] } }) ], })
搜尋引擎
這邊有個小地方要注意,在public資料夾去新增robot.txt的文件來允許引擎抓取你的應用程式,新增內容如下。
1
2
User-agent: *
Allow: /
測試
- 上面都配置完後,在dev環境運行會看到原本多了一個可以下載的Icon。
- 下載後就可以看到類似Agent應用程式的效果了。
結語
透過上述的流程,不用花多久,簡單的PWA就設定完成,而比較詳細的內容可以翻一下官方的文件Vite PWA,裡面有其他更詳細的運用。
This post is licensed under CC BY 4.0 by the author.