vue3+ts+vite项目中使用vite-plugin-pwa搭建 PWA 项目

参考官方github地址:
https://github.com/vite-pwa/vite-plugin-pwa
官方文档地址:
https://vite-pwa-org.netlify.app/guide
MDN地址:
https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps

前提概要

最近项目更新需求中,希望使用PWA,用来方便用户添加网站到桌面

解释PWA

渐进式 Web 应用(Progressive Web App,PWA) 是一个使用 web 平台技术构建的应用程序,但它提供的用户体验就像一个特定平台的应用程序。

它像网站一样,PWA 可以通过一个代码库在多个平台和设备上运行。它也像一个特定平台的应用程序一样,可以安装在设备上,可以离线和在后台运行,并且可以与设备和其他已安装的应用程序集成。

具体怎么详细解释可以看官方文档,不过

首先我们需要知道的一点:

PWA支持哪些操作系统:

  • Android: PWA在Android设备上得到最好的支持。Android在Chrome浏览器中支持PWA,用户可以将PWA添加到主屏幕上,并在离线状态下使用
  • iOS: PWA在iOS设备上也得到了一定的支持。iOS 11.3以上的版本支持PWA,但是在iOS设备上,PWA不能够像在Android设备上一样被添加到主屏幕上。(👈这个很重要
  • Windows: Windows 10中的Microsoft Edge浏览器支持PWA。用户可以将PWA添加到任务栏或开始菜单上,并在离线状态下使用。
  • macOS: Safari浏览器在macOS 10.13.4以上的版本中开始支持PWA。用户可以将PWA添加到Dock中,并在离线状态下使用。

PWA的优点

这点可自行百度,这块官方说的优点一套一套的,不过我们的需求主要是看重:

  • 可安装性: PWA可以被添加到主屏幕上,并在离线状态下使用,就像本地应用程序一样。这使得用户可以更方便地访问应用程序,并且可以更好地保留应用程序的使用记录。
  • 快速性: PWA使用缓存技术和预加载技术,使得应用程序可以快速加载并响应用户操作。这意味着用户可以更快地访问应用程序,并获得更好的用户体验。

PWA的缺点

  1. 兼容性: 虽然现代浏览器对PWA的支持越来越好,但是在一些旧版本浏览器上可能无法正常运行。
  2. 功能限制: 与本地应用程序相比,PWA的功能仍然有所限制。例如,PWA不能访问设备硬件,如摄像头或指纹识别器,也不能在后台运行。
  3. 开发成本: 虽然PWA可以为用户提供更好的用户体验和更高的可靠性,但是创建一个PWA的开发成本可能会比创建一个Web应用程序更高。
  4. 安全性: PWA的缓存技术和离线访问功能可能会引发一些安全问题,例如缓存数据被盗取或篡改。

主要觉得目前pwa普及性不高的原因就是优点不够优秀,缺点的1、4项又很头大。

在我看来,pwa就只是浏览器的一个tab页,打开一个网站,然后把这个tab页套壳成桌面应用。

使用PWA

使用方法,是基于我们的Vue3项目已经存在的情况(vue3+ts+vite),项目都没有的话,先去建项目!

安装vite-plugin-pwa

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

从 v0.17 开始,vite-plugin-pwa需要Vite 5。
从 v0.16 开始vite-plugin-pwa需要Node 16 或以上:workbox v7需要Node 16 或以上。
从 v0.13 开始,vite-plugin-pwa需要Vite 3.1 或更高版本。

vite.config.ts文件配置

添加VitePWA插件vite.config.js / vite.config.ts并配置:

// vite.config.js / vite.config.ts
import { VitePWA } from 'vite-plugin-pwa'export default {plugins: [VitePWA({registerType: 'autoUpdate', // 如果此项值为autoUpdate,则为自动给更新manifest: {name: 'demo name', // 项目名id: "csdn",short_name: 'MyApp',description: '一个Vite PWA测试APP', theme_color: '#DC143C', // 红 // 用于设置工具栏的颜色,并且可以反映在任务切换器中的应用预览中。theme_color 应与文档标头中指定的 meta 主题颜色一致。background_color: '#FFFF00', // 黄-首次在移动设备上启动应用时,启动画面会使用 background_color 属性。display: "minimal-ui", // 您可以自定义应用启动时显示的浏览器界面。例如,您可以隐藏地址栏和浏览器界面元素icons: [		//添加图标,注意路径和图像像素正确,sizes必须和图片的尺寸一致{src: 'logo.png',sizes: '500x500', // 大于144type: 'image/png',},],screenshots: [ //{"src": "111.png","type": "image/png","sizes": "540x720", "form_factor": "narrow"},{"src": "222.png","type": "image/png","sizes": "720x540","form_factor": "wide"}]},workbox: {globPatterns: ['**/*.{js,css,html,ico,png,jpg,svg}'],		//缓存相关静态资源},devOptions: {enabled: true}})]
}

其实主要分为两大配置:

  • manifest: 详细官方配置说明
  • workbox: 详细官方配置说明

main.ts文件配置

// main.ts
// 在主入口监听PWA注册事件
window.addEventListener('beforeinstallprompt', e => {e.preventDefault()window.deferredPrompt = e
})

业务代码页面使用

// xxx.vue
const openAddFlow = () => {if (isIOS()) {// 如果是苹果手机,直接显示浏览器设置指引图showAddTipsDialog.value = true} else {try {window.deferredPrompt.prompt()window.deferredPrompt.userChoice.then(choiceResult => {if (choiceResult.outcome === 'accepted') {console.log('addDesktop-pwa')localStorage.setItem('addDesktop', true)} else {console.log('User dismissed the A2HS prompt')}window.deferredPrompt = null})} catch {console.log('error-pwa')}}
}

Tips

  1. PWA 必须要 localhosthttps 才能生效。
  2. ios浏览器PWA不能够像在Android设备上一样被添加到主屏幕上,所以要是有业务代码(如:按钮)需要做判断显示隐藏。

代码生效的正确显示

在这里插入图片描述
安装后
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类和对象·this指针

C中的类与C语言中的结构体有很多的相似的地方,可以说本质上除了结构体只能定义成员变量,以及结构体默认的访问控制权限是public之外与class没啥区别。但是结构体变量每次调用函数的时候需要指针,而类中的成员函数明明被保存在公共代码段&…

30秒学会UML-功能类图

目录 1、类图本体 三部分 修饰符 2、类与类直接关系 泛化关系 实现关系 简单关联关系 依赖关系 组合关系 聚合关系 1、类图本体 三部分 第一层:类名第二层:成员变量(类的属性)第三层:函数方法(类…

水利行业的智慧革命:深度剖析智慧水利解决方案,看其如何以科技力量提升水资源管理效率,保障水生态安全

目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 感知层:全面监测,精准感知 2. 网络层:互联互通,信息共享 3. 平台层:数据分析,智能决策 4. 应用层:精准施策&#xff0…

【线程系列之五】线程池介绍C语言

一、基本概念 1.1 概念 线程池(Thread Pool)是一种基于池化技术管理线程的机制,旨在减少线程创建和销毁的开销,提高系统资源的利用率,以及更好地控制系统中同时运行的线程数量。线程池通过预先创建一定数量的线程&am…

3 C 语言运算符深度解析:从基础到实战

目录 1 运算符分类 2 算术运算符与算术表达式 2.1 算术运算符的用法 2.2 左操作数和右操作数 3 关系运算符与关系表达式 3.1 关系运算符的用法 3.2 常量左置防错 3.3 三数相等判断误区 4 逻辑运算符与逻辑表达式 4.1 逻辑运算符的用法 4.2 闰年的判断 4.3 短路运算…

golang单元测试性能测试常见用法

关于go test的一些说明 golang安装后可以使用go test工具进行单元测试 代码片段对比的性能测试,使用起来还是比较方便,下面是一些应用场景 平时自己想做一些简单函数的单元测试,不用每次都新建一个main.go 然后go run main.go相对某个功能做下性能测试 看下cpu/内存…

k8s集群 安装配置 Prometheus+grafana+alertmanager

k8s集群 安装配置 Prometheusgrafanaalertmanager k8s环境如下:机器规划: node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置…

自动驾驶AVM环视算法–全景和标定全功能算法实现和exe测试demo

参考:全景和标定全功能算法实现和exe测试demo-金书世界 1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新:测试的exe程序,无需解压码就可以体验算法测试效果 百度网盘: 链接:http…

代理IP服务中的代理池大小有何影响?

在当今数字化时代,网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中,使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题,构建代理池成为一种有效的解决方…

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)

1、下载webrtc-streamer,下载的最新window版本 Releases mpromonet/webrtc-streamer GitHub 2、解压下载包 3、webrtc-streamer.exe启动服务 (注意:这里可以通过当前文件夹下用cmd命令webrtc-streamer.exe -o这样占用cpu会很少&#xff0c…

idea Apipost 插件导出接口文档字段类型全部是string

idea版本:2023.2.1 Apipost-Helper-2.0插件版本: 联系官方客服后,更换插件版本,问题解决。更换后的插件版本为: 插件链接放在文章首部了,可直接下载,使用idea直接安装这个zip包,无需…

深度学习pytorch学到哪种程度就算入门了?

在开始前分享一些pytorch的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的PyTorch这个框架,可以读一些入门书。 PyTorch本身是一个极其庞大的框架,里面有数据读取、高性能计算、自动微分、模型导出、分布式训练等等。 我觉得能用这个框…

ELK日志管理与应用

目录 一.ELK收集nginx日志 二.收集tomcat日志 三.Filebeat 一.ELK收集nginx日志 1.搭建好ELKlogstashkibana架构 2.关闭防火墙和selinux systemctl stop firewalld setenforce 0 3.安装nginx [rootlocalhost ~]# yum install epel-release.noarch -y [rootlocalhost …

使用Django框架实现音频上传功能

数据库设计(models.py) class Music(models.Model):""" 音乐 """name models.CharField(verbose_name"音乐名字", max_length32)singer models.CharField(verbose_name"歌手", max_length32)# 本质…

Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBase 正在 章节内容 上节我们完成了: HBase的由…

Apache Paimon 在蚂蚁的应用

摘要 :本文整理自 Apache Paimon Committer 闵文俊老师在5月16日 Streaming Lakehouse Meetup Online 上的分享。内容主要分为以下四个部分: 什么是 Paimon蚂蚁 Paimon 应用场景蚂蚁 Paimon 功能改进未来规划 一、什么是 Paimon 1. 实时更新 Paimon 是…

Hadoop3:HDFS存储优化之小文件归档

一、情景说明 我们知道,NameNode存储一个文件元数据,默认是150byte大小的内存空间。 那么,如果出现很多的小文件,就会导致NameNode的内存占用。 但注意,存储小文件所需要的磁盘容量和数据块的大小无关。 例如&#x…

用户注册业务逻辑、接口设计和实现、前端逻辑

一、用户注册业务逻辑分析 二、用户注册接口设计和定义 2.1. 设计接口基本思路 对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。设计接口的思路: 分析要实现的业务逻辑: 明确在这个业务中涉及到几个相关子…

如何通过企业微信会话存档保护企业利益?

赵总: 张经理,最近行业内频发数据泄露事件,我们的客户资料和内部沟通记录安全吗? 张经理: 赵总,我们已经采取了一系列措施来加强数据安全。特别是针对企业微信的沟通记录,我们最近引入了安企神软件,它能很…