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

2024-01-05 15:04

本文主要是介绍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

可以试试看

这篇关于vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573262

相关文章

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

使用Python实现Windows系统垃圾清理

《使用Python实现Windows系统垃圾清理》Windows自带的磁盘清理工具功能有限,无法深度清理各类垃圾文件,所以本文为大家介绍了如何使用Python+PyQt5开发一个Windows系统垃圾... 目录一、开发背景与工具概述1.1 为什么需要专业清理工具1.2 工具设计理念二、工具核心功能解析2.

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl