[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-nuxt-3-的-pwa-設定方式":3},{"id":4,"slug":5,"title":6,"description":7,"content":8,"date":9,"image":10,"imageAlt":6,"author":11,"categories":14,"path":17,"minRead":18},3700,"nuxt-3-的-pwa-設定方式","Nuxt 3 的 PWA 設定方式","Nuxt 3 的 PWA 設定方式 Nuxt 3 內就有基本的 PWA 設定，因為我只需要用到主畫面連結，因此 […]","\u003Ch1>Nuxt 3 的 PWA 設定方式\u003C\u002Fh1>\n\u003Cp>Nuxt 3 內就有基本的 PWA 設定，因為我只需要用到主畫面連結，因此用這做法就足夠了\u003C\u002Fp>\n\u003Cp>首先是設定基本的資訊\u003C\u002Fp>\n\u003Cp>nuxt.config.ts\u003C\u002Fp>\n\u003Cpre>\u003Ccode>import { defineNuxtConfig } from &#039;nuxt3&#039;\n\nexport default defineNuxtConfig({\n  meta: {\n    title: &#039;Nuxt3 PWA&#039;,\n    charset: &#039;utf-8&#039;,\n    meta: [\n      { name: &#039;theme-color&#039;, content: &#039;#ffdd67&#039; }\n    ],\n    link: [\n      { hid: &#039;icon&#039;, rel: &#039;icon&#039;, type: &#039;image\u002Fpng&#039;, href: &#039;\u002Flogo_x32.png&#039; },\n      { hid: &#039;apple-touch-icon&#039;, rel: &#039;apple-touch-icon&#039;, href: &#039;\u002Flogo_x180.png&#039; },\n      { rel: &#039;manifest&#039;, href: &#039;\u002Fmanifest.json&#039; }\n    ]\n  }\n})\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>再來於 public  裡面加入manifest.json 以及顯示的圖檔\u003C\u002Fp>\n\u003Cp>manifest.json\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&quot;name&quot;: &quot;Nuxt3 PWA&quot;,\n    &quot;icons&quot;: [\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x512.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;512x512&quot;,\n            &quot;purpose&quot;: &quot;maskable&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x384.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;384x384&quot;,\n            &quot;purpose&quot;: &quot;maskable&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x192.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;192x192&quot;,\n            &quot;purpose&quot;: &quot;maskable&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x128.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;128x128&quot;,\n            &quot;purpose&quot;: &quot;maskable&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x96.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;96x96&quot;,\n            &quot;purpose&quot;: &quot;maskable&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x72.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;72x72&quot;,\n            &quot;purpose&quot;: &quot;maskable&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x48.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;48x48&quot;,\n            &quot;purpose&quot;: &quot;any&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x180.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;180x180&quot;,\n            &quot;purpose&quot;: &quot;any&quot;\n        },\n        {\n            &quot;src&quot;: &quot;\u002Flogo_x120.png&quot;,\n            &quot;types&quot;: &quot;img\u002Fpng&quot;,\n            &quot;sizes&quot;: &quot;120x120&quot;,\n            &quot;purpose&quot;: &quot;any&quot;\n        }\n    ],\n    &quot;start_url&quot;: &quot;\u002F?source=pwa&quot;,\n    &quot;display&quot;: &quot;fullscreen&quot;,\n    &quot;background_color&quot;: &quot;#000000&quot;,\n    &quot;theme_color&quot;: &quot;#000000&quot;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>app.vue 最好加個防呆\u003C\u002Fp>\n\u003Cpre>\u003Ccode>if (process.client) {\n  window.addEventListener(&#039;load&#039;, () =&gt; {\n    if (!(&#039;serviceWorker&#039; in navigator)) {\n      throw new Error(&#039;serviceWorker is not supported in current browser!&#039;)\n    }\n\n    navigator.serviceWorker.register(&#039;\u002Fsw.js&#039;)\n  })\n}\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>大致上使用 PWA 時就吃到資料囉～\u003C\u002Fp>\n","2024-04-01T10:04:39","\u002Fapi\u002Fproxy-image?url=https%3A%2F%2Fpost.billxu.net%2Fwp-content%2Fuploads%2F2024%2F03%2Ficon-green.svg",{"name":12,"link":13},"Chih Fan","http:\u002F\u002Fpost.billxu.net",[15],{"name":16,"slug":16},"vue","\u002Fblog\u002Fnuxt-3-的-pwa-設定方式",2]