nuxt3配置pwa

827 阅读3分钟

使用 nuxt3 配置 pwa 有对应的插件,可以直接在官方网站里搜索

nuxt.com/modules?q=p…

image.png

初始化一个 nuxt3 项目

执行 npx nuxi@latest init nuxt3-pwa-demo

你可能会遇到这个错误

Error: Failed to download template from registry: Failed to download https://raw.githubusercontent.com/nuxt/starter/templates/templates/v3.json: TypeError: fetch failed

官方的 issuse 中的这个解决办法是可以用的

image.png

获取下 ip 猛击进入

image.png

然后修改下 hosts 文件

185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com

mac 修改 hosts 文件需要 sudo 命令 sudo vim /etc/hosts

image.png

然后 esc 输入 :wq 保存后退出

输入 sudo killall -HUP mDNSResponder 刷新下系统 dns

执行 ping raw.githubusercontent.com 查看下是否可以访问到

image.png

这里说点额外的

https://raw.githubusercontent.com 这个网站是什么呢?

GitHub 是一个代码托管平台我们可以在上面创建仓库来存储和分享代码。raw.githubusercontent.com 则可以直接访问和查看仓库中文件的原始内容,而不是通过 GitHub 的网页界面。

上边获取的 https://raw.githubusercontent.com/nuxt/starter/templates/templates/v3.json

image.png

对应的就是 github https://github.com/nuxt/starter/blob/templates/templates/v3.json

image.png

配置 pwa

根据图里的内容进行配置

image.png

执行 npx nuxi@latest module add @vite-pwa/nuxt 安装 pwa 插件,会自动添加到 nuxt.config.ts 的 modules 中

image.png

增加 pwa 配置

import process from 'node:process'

const sw = process.env.SW === 'true'

// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: { enabled: true },
  modules: ["@vite-pwa/nuxt"],
  pwa: {
    strategies: sw ? 'injectManifest' : 'generateSW',
    srcDir: sw ? 'service-worker' : undefined,
    filename: sw ? 'sw.ts' : undefined,
    registerType: 'autoUpdate',
    manifest: {
      name: 'nuxt3-pwa',
      short_name: 'nuxt3-pwa',
      description: 'nuxt3-pwa',
      theme_color: '#ffffff',
      background_color: '#ffffff',
      icons: [
        {
          src: '/logo.png',
          sizes: '192x192',
          type: 'image/png',
        },
        {
          src: '/logo.png',
          sizes: '512x512',
          type: 'image/png',
        },
      ],
    },
    workbox: {
      globPatterns: ['**/*.{js,css,html,png,svg,ico}'],
    },
    injectManifest: {
      globPatterns: ['**/*.{js,css,html,png,svg,ico}'],
    },
    client: {
      installPrompt: true,
      // you don't need to include this: only for testing purposes
      // if enabling periodic sync for update use 1 hour or so (periodicSyncForUpdates: 3600)
      periodicSyncForUpdates: 3600,
    },
    devOptions: {
      enabled: true,
      suppressWarnings: true,
      navigateFallback: '/',
      navigateFallbackAllowlist: [/^\/$/],
      type: 'module',
    },
  },
})

/logo.png logo 图片存放在 punlic 文件夹下

image.png

修改 app.vue 增加 <NuxtPwaManifest /> 组件

image.png

然后重新启动项目 pnpm run dev 等待项目启动完成,等下图 pwa 部分生成完成

image.png

打开浏览器访问页面,显示如下图代表 pwa 配置成功!

image.png

image.png

验证下打包后是否正常

generate

执行 pnpm run generate, 可以看到生成了 sw.js 文件

image.png

根据提示我们执行下 npx serve .output/public 如果没有安装 serve 的话会提示安装

generate 生成的文件 public 就相当于是 dist

image.png

浏览器访问下,看起来和本地是一样的

image.png

build

执行 pnpm run build 可以看到和上边一样生成了 sw.js 文件

image.png

这里提示我们执行 node .output/server/index.mjs 就可以运行项目,线上一般是使用 pm2 这里就不展开了

image.png

浏览器访问下,看起来和本地、generate是一样的

image.png

总结

本文实践了在 nuxt3 中如何配置 pwa,当然是比较简单的实践 pwa 作为渐进式 Web 应用能做不止如此!

官方示例demo

往期文章