vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

一、概述

情况还是那么个情况,还是原来的项目 vue2 改为 vite+ts+vue3 遇到的问题,今天这个问题是如何 在 Vite 环境下设置 PWA。
PWA 就是网页应用可以像 app 那样不显示上下边栏在手机中使用,也可以从 PC 端脱离浏览器而显示为一个独立程序的样子使用。

vue-cli 环境时是这样实现的: Vue3 PWA 如何配置

今天就来说说如何在 vite 环境下实现上面的操作

二、实现

要实现 PWA 需要满足两个条件:

  1. index.html 中需要添加指定的属性
  2. vite.config.ts 中需要添加指定的配置

1. 安装插件 vite-plugin-pwa

vite 中要想实现 pwa 配置,需要在项目环境中安装一个插件 vite-plugin-pwa,它有 ServiceWorkerPWA

vite-plugin-pwa 官方 pwa 说明: https://vite-pwa-org.netlify.app/guide/pwa-minimal-requirements.html

yarn、npm 两种安装环境自行选择

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

2. 在 vite.config.ts 中添加对应配置

一般插件都配在非常健全文档,只需要访问它的官网就可以,找到 github 找到 npm 中的包页面。根据文档设置就可以了。

添加 VitePWA 插件

import { VitePWA } from 'vite-plugin-pwa'

defineConfig() 中的 plugins 字段中添加这个插件。
这个地方关于 manifest 的配置是跟 vue-cli 时的配置一样的,我是直接拿过来用的,可用。

VitePWA({injectRegister: 'auto',registerType: 'autoUpdate',devOptions: {enabled: true  // 是否支持开发模式下也使 pwa 生效},// MANIFEST PWA https://vite-pwa-org.netlify.app/guide/pwa-minimal-requirements.htmlincludeAssets: ['logo.svg', 'apple-touch-icon.png', 'mask-icon.svg', 'favicon.png'], // 应该是下面 manifest 中可能用到的文件名字吧manifest: {name: '标题日记',short_name: "日记",theme_color: "#373737",start_url: "./",display: "standalone",background_color: "#373737",icons: [{src: "logo.svg",sizes: "512x512",type: "image/svg+xml",purpose: "any",},{src: "appicon-apple.png",sizes: "512x512",type: "image/png",purpose: "any",},],},
})

为了让你能看清它是在哪个位置,我的 vite.config.ts 完整的配置文件内容是这样的:

import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import svgLoader from "vite-svg-loader"
import { VitePWA } from 'vite-plugin-pwa'import { resolve } from 'path'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),svgLoader(),VitePWA({injectRegister: 'auto',registerType: 'autoUpdate',devOptions: {enabled: true},// MANIFEST PWA https://vite-pwa-org.netlify.app/guide/pwa-minimal-requirements.htmlincludeAssets: ['logo.svg', 'apple-touch-icon.png', 'mask-icon.svg', 'favicon.png'],manifest: {name: '标题日记',short_name: "日记",theme_color: "#373737",start_url: "./",display: "standalone",background_color: "#373737",icons: [{src: "logo.svg",sizes: "512x512",type: "image/svg+xml",purpose: "any",},{src: "appicon-apple.png",sizes: "512x512",type: "image/png",purpose: "any",},],},})],resolve: {alias: {'@': resolve(__dirname, 'src'),},},server: {host: '0.0.0.0',// 自定义主机名port: 8080,// 自定义端口https: false,proxy: {'/dev': {// target: 'http://localhost:3000',target: 'http://kylebing.cn:3000',changeOrigin: true,rewrite: (path) => path.replace(/^\/dev/, '/'),},}}
})

在编辑器中因为有 ts 的加持,能看到里面的属性一个萝卜一个坑,很舒服。

在这里插入图片描述

3. index.html 配置

关于 index.html 需要添加的东西,官方说明:
https://vite-pwa-org.netlify.app/guide/pwa-minimal-requirements.html#entry-point

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><!-- 搜索 --><meta name='description' content="日记,标题日记,headline diary,人生日志,life log,日记应用,日记app,web版日记,diary web,纯文本日记,免费日记"><meta name='keywords' content="日记,标题日记,headline diary,人生日志,life log,日记应用,日记app,web版日记,diary web,纯文本日记,免费日记"><!-- web app --><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><!-- theme color--><meta name="theme-color" content="#373737" media="(prefers-color-scheme: light)"><meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)"><!-- fav icon --><link rel="shortcut icon" href="./favicon.png" type="image/png"><!-- apple-touch-icon --><link rel="apple-touch-icon" href="./appicon-apple.png"><!-- mask-icon 目前非必须 --><link rel="mask-icon" href="./appicon-apple.png"><title>日记</title>
</head>

三、结果

可以安装这个 web 到系统中了。
这样加完再运行的时候就会是这样,能看到在浏览器的右上角多出一个下载的按钮,就是表明这个网站这个应用是 PWA 页面。

在这里插入图片描述
当打开「下载」好的应用时,能看到它不会显示浏览器的地址栏,并且在系统独占一个程序图标,这个图标就是你在 PWA 中设置的图标,名字也是你设置的名字,完完全全是一个程序的样子。

在这里插入图片描述

类似的程序有:

  • v2ex https://www.v2ex.com/ 需要外网
  • 音乐解码 https://kylebing.cn/tools/unlock-music/
  • 标题日记 https://kylebing.cn/diary

可以试试看

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

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

相关文章

java是值传递还是引用传递

1.前言 java是值传递&#xff1b;值传递是指在调用方法时将实际参数拷贝一份传递到方法中&#xff0c;这样在方法中如果对参数进行修改&#xff0c;将不会影响到实际参数&#xff1b;当传的是基本类型时&#xff0c;传的是值的拷贝&#xff0c;对拷贝变量的修改不影响原变量&a…

2023职业规划与心灵成长-7年JAVA开发的自我思考

博主是一个知足长乐&#xff0c;安于现状&#xff0c;热爱编程&#xff0c;家庭大于一切 的技术小达人。 19年从一家中型软件公司研发岗跳到了一家小国有企业的IT部&#xff1b;已经4年了&#xff0c;记录下当下历程吧&#xff0c;留给以后得自己看也给目前各位想跳的朋友参考下…

krpano官网文档翻译-------krpano Action脚本参考文档【krpano Actions / Scripting Reference】

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 摘要:本文通过大量代码案例,手把手教你如何使用krpano的Action脚本实现各种交互控制和酷炫…

OpenAI ChatGPT-4开发笔记2024-01:开发环境

ChatGPT发展一日千里。工具、函数少则数日&#xff0c;多则数月就加入了Deprecated行列不再如预期般工作。元旦闲来无事&#xff0c;用最新的ChatGPT重写一下各种开发场景&#xff0c;全部实测通过。 开发环境&#xff1a; 电脑&#xff1a;两台笔记本&#xff1a;HP和MacBoo…

代码随想录day24 开启回溯算法

个人见解 感觉回溯算法其实和递归很像&#xff0c;也是用递归的做法&#xff0c;也有三部曲&#xff0c;但又不太一样的地方是递归中类似二叉树&#xff0c;只有纵向遍历&#xff08;一层层往下遍历&#xff0c;没有横向遍历&#xff09;&#xff0c;而回溯算法中多的for循环就…

服务端性能测试——性能测试体系

目录&#xff1a; 1.性能测试介绍 性能测试介绍性能体系&#xff1a;性能测试与分析优化&#xff1a;行业流行性能压测工具介绍行业流行性能监控工具介绍行业流行性能剖析工具介绍性能测试流程与方法性能测试计划 计划&#xff1a;DAU&#xff0c;PV(perday)&#xff0c;订单量…

C#COM对象的资源释放

在C#中使用COM对象时&#xff0c;由于COM对象遵循引用计数&#xff08;Reference Counting&#xff09;的管理方式&#xff0c;当COM对象的引用计数为0时&#xff0c;系统才会真正释放该COM对象所占用的资源。然而&#xff0c;在.NET环境下&#xff0c;CLR&#xff08;Common L…

HTTP 3xx状态码:重定向的场景与区别

HTTP 状态码是服务器响应请求时传递给客户端的重要信息。3xx 系列的状态码主要与重定向有关&#xff0c;用于指示请求的资源已被移动到不同的位置&#xff0c;需要采取不同的操作来访问。 一、301 Moved Permanently 定义&#xff1a; 服务器表明请求的资源已永久移动到一个新…

Fluids —— Volume VOP

P&#xff0c;当前体素位置&#xff1b;density&#xff0c;此场的值&#xff1b;ix, iy, iz&#xff0c;体素索引&#xff08;0 ~ res-1&#xff09;&#xff1b;resx, resy, resz&#xff0c;当前volume的精度&#xff1b;center&#xff0c;当前volume的中心点&#xff1b;o…

STM32入门教程-2023版【3-3】gpio输入

关注 星标公众号 不错过精彩内容 大家好&#xff0c;我是硬核王同学&#xff0c;最近在做免费的嵌入式知识分享&#xff0c;帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 上两小节我们已经把GPIO的结构和8种输入输出模式都讲完了&#xff0c;到这里还不懂的可以回…

记录汇川:ITP与Autoshop进行仿真连接

1、定义如下程序&#xff1a; 2、ITP新建工程&#xff1a; 3、依次选择&#xff0c;最后修改IP 4、定义两个变量 5、拖一个按钮和一个圈出来&#xff0c;地址绑定&#xff1a;M1 6、地址绑定&#xff1a;Y1 7、PLC启动仿真 8、ITP启动在线模拟器 9、即可实现模拟仿真

scripts:查看数据库历史增长情况

查看数据库历史增长情况 此处是通过计算数据库所有表空间的历史增长情况来计算数据库历史情况。 --不含undo和temp with tmp as (select rtime, sum(tablespace_usedsize_kb) tablespace_usedsize_kb, sum(tablespace_size_kb) tablespace_size_kb from (select rtime, e.ta…

力扣——C语言:合并两个有序数组

88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 这道题有多种方法可以解决 一、暴力求解 这种方法最简单&#xff0c;我们只需要把两个数组合在一起然后在冒泡排序就可以了 代码如下&#xff1a; void merge(int* nums1, int nums1Size, int m, int* nums2…

Redis 过期删除策略

常见的三种过期删除策略&#xff1a; 定期删除&#xff1b;惰性删除&#xff1b;定时删除&#xff1b; 定期删除策略 每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查&#xff0c;并删除其中的过期key。 定期删除的实现在 expire.c 文件下的 activeExpireCycle …

c++在结构(Struct)中使用栈(Stack)

栈实现 1.入栈 2.出栈 3.空栈 4.满栈 5.栈顶 完整栈实现源码: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_

Python程序中的异常处理解决方法

如何在Python程序中抛出异常&#xff0c;又不影响正常程序运行 在Python中&#xff0c;可以使用try...except...语句捕获异常。如果我们在程序中遇到了异常情况&#xff0c;可以使用raise语句主动抛出异常&#xff0c;从而触发try...except...块中的异常处理逻辑。如果我们希望…

【驱动序列】C#获取电脑硬件之CPU信息,以及它都有那些品牌

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是是《驱动序列》文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识…

MFC模拟消息发送,自定义以及系统消息

在MFC框架下&#xff0c;有很多系统已经定义好的消息&#xff0c;例如ON_WM_LBUTTONDOWN()、ON_WM_MBUTTONDOWN()等等。我们在使用的时候只需要声明并调用就可以了&#xff0c;最简单的用法。 提升了一点难度的用法就是自己设置自定义消息&#xff0c;再提升一点难度的就是如何…

DAY2-English Learning

一、积累 1.trunk 案例&#xff1a; i put my luggage in the trunk of the car. 翻译&#xff1a;我把行李放在汽车的后备箱里。 2. solvent 例句&#xff1a;The sovlent is uesd to dissolve the paint. 翻译&#xff1a;溶剂是用来溶解油漆的。 3. 受伤的表达 1.cramp …

人工智能_机器学习091_使用三维瑞士卷数据_KMeans聚类算法进行瑞士卷数据聚类---人工智能工作笔记0131

然后我们首先来构建一下数据 准备瑞士卷数据: import numpy as np 导入数学计算包 import matplotlib.pyplot as plt 导入画图包 #自底向上聚类 from sklearn.cluster import AgglceerativeClustering 导入分层聚类模型 from sklearn.datasets import make_swiss_roll # 瑞士卷…