3分钟搞定vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用

 更新时间:2024年02月03日 10:34:46   作者:1024小神  
这篇文章主要介绍了3分钟搞定vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

将项目配置为pwa模式,就可以在浏览器里面看到安装应用的选项,并且可以将web网页像app一样添加到手机桌面或者pad桌面上,或者是电脑桌面上,这样带来的体验就像真的在一个app上运行一样。为了实现这个目的,我们可以为vue项目使用一个插件:vite-plugin-pwa

vite-plugin-pwa仓库地址:https://github.com/vite-pwa/vite-plugin-pwa

vite-plugin-pwa文档地址:Getting Started | Guide | Vite PWA 

安装插件

直接使用npm安装即可

npm i vite-plugin-pwa -D 
# yarn 
yarn add vite-plugin-pwa -D
# pnpm 
pnpm add vite-plugin-pwa -D

配置插件

先有一个pwa应用的图标,最好是png格式的,尺寸最好大于192x192的:

在vite.config.js/ts中配置pwa应用:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { VitePWA } from 'vite-plugin-pwa'
// 生产还是开发
const mode = 'production'
// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        VitePWA({
            mode: 'development',
            base: '/',
            manifest: {
                name: '应用名称',
                short_name: '应用名称',
                description: '应用描述',
                icons: [
                    //添加图标, 注意路径和图像像素正确
                    {
                        src: './public/app.png',
                        sizes: '1024x1024',
                        type: 'image/png',
                    },
                ],
            },
            registerType: 'autoUpdate',
            workbox: {
                globPatterns: ['**/*.{js,css,html,ico,png,jpg,svg}'], //缓存相关静态资源
                runtimeCaching: [
                    // 配置自定义运行时缓存
                    mode !== 'production'
                        ? {
                              urlPattern: ({ url }) =>
                                  url.origin === 'https://app-api-0.com',
                              handler: 'NetworkFirst',
                              options: {
                                  cacheName: 'wisbayar-api',
                                  cacheableResponse: {
                                      statuses: [200],
                                  },
                              },
                          }
                        : {
                              urlPattern: ({ url }) =>
                                  url.origin === 'https://app-api.id',
                              handler: 'NetworkFirst',
                              options: {
                                  cacheName: 'wisbayar-api',
                                  cacheableResponse: {
                                      statuses: [200],
                                  },
                              },
                          },
                    {
                        urlPattern: /\.(?:png|jpg|jpeg|svg)$/,
                        handler: 'CacheFirst',
                        options: {
                            cacheName: 'wisbayar-images',
                            expiration: {
                                // 最多30个图
                                maxEntries: 30,
                            },
                        },
                    },
                    {
                        urlPattern: /.*\.js.*/,
                        handler: 'StaleWhileRevalidate',
                        options: {
                            cacheName: 'wisbayar-js',
                            expiration: {
                                maxEntries: 30, // 最多缓存30个,超过的按照LRU原则删除
                                maxAgeSeconds: 30 * 24 * 60 * 60,
                            },
                            cacheableResponse: {
                                statuses: [200],
                            },
                        },
                    },
                    {
                        urlPattern: /.*\.css.*/,
                        handler: 'StaleWhileRevalidate',
                        options: {
                            cacheName: 'wisbayar-css',
                            expiration: {
                                maxEntries: 20,
                                maxAgeSeconds: 30 * 24 * 60 * 60,
                            },
                            cacheableResponse: {
                                statuses: [200],
                            },
                        },
                    },
                    {
                        urlPattern: /.*\.html.*/,
                        handler: 'StaleWhileRevalidate',
                        options: {
                            cacheName: 'wisbayar-html',
                            expiration: {
                                maxEntries: 20,
                                maxAgeSeconds: 30 * 24 * 60 * 60,
                            },
                            cacheableResponse: {
                                statuses: [200],
                            },
                        },
                    },
                ],
            },
            devOptions: {
                enabled: true,
            },
        }),
    ],
    server: {
        host: '0.0.0.0',
    },
    resolve: {
        alias: {
            '@': path.resolve(__dirname, 'src'),
        },
    },
})

测试上线

然后重新运行项目,就可以看到浏览器页面上有标识可以安装了:

如果想判断页面是不是在pwa中打开的,可以尝试使用:

    const isInStandaloneMode = () =>
        (window.matchMedia('(display-mode: standalone)').matches) || (window.navigator.standalone) || document.referrer.includes('android-app://');
    if (isInStandaloneMode()) {
        document.body.innerHTML = "是在pwa中打开的"
    }else {
        document.body.innerHTML = "请在pwa中打开"
    }

到此这篇关于3分钟搞定vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用的文章就介绍到这了,更多相关vite项目使用vite-plugin-pwa配置为pwa内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue通过定时器实现垂直滚动公告

    vue通过定时器实现垂直滚动公告

    这篇文章主要为大家详细介绍了vue通过定时器实现垂直滚动公告,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 在vue中实现嵌套页面(iframe)

    在vue中实现嵌套页面(iframe)

    这篇文章主要介绍了在vue中实现嵌套页面(iframe),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 浅谈vue-router2路由参数注意的问题

    浅谈vue-router2路由参数注意的问题

    下面小编就为大家带来一篇浅谈vue-router2路由参数注意的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Vue侧滑菜单组件——DrawerLayout

    Vue侧滑菜单组件——DrawerLayout

    本文介绍一个简单的DrawerLayout(类似Android的DrawerLayout)布局组件的实现,基于Vue.js侧滑菜单组件的实现代码大家通过本文一起学习吧
    2017-12-12
  • Vue CLI 2.x搭建vue(目录最全分析)

    Vue CLI 2.x搭建vue(目录最全分析)

    这篇文章主要介绍了Vue CLI 2.x搭建vue(目录最全分析),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • vue 中的 render 函数作用详解

    vue 中的 render 函数作用详解

    这篇文章主要介绍了vue 中的 render 函数作用,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • vue.js Table 组件自定义列宽实现核心方法

    vue.js Table 组件自定义列宽实现核心方法

    这篇文章主要介绍了vue.js Table 组件自定义列宽实现核心方法,文围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Nuxt.js踩坑总结分享

    Nuxt.js踩坑总结分享

    本篇文章主要介绍了Nuxt.js踩坑总结分享,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Element-ui el-tree新增和删除节点后如何刷新tree的实例

    Element-ui el-tree新增和删除节点后如何刷新tree的实例

    这篇文章主要介绍了Element-ui el-tree新增和删除节点后如何刷新tree的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue video和vue-video-player实现视频铺满教程

    vue video和vue-video-player实现视频铺满教程

    这篇文章主要介绍了vue video和vue-video-player实现视频铺满教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论