前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 vue 创建你的第一个 PWA 应用

使用 vue 创建你的第一个 PWA 应用

作者头像
桑榆肖物
发布于 2022-11-18 02:10:21
发布于 2022-11-18 02:10:21
1.6K00
代码可运行
举报
文章被收录于专栏:桑榆肖物桑榆肖物
运行总次数:0
代码可运行

本文将介绍使用 VUE3 框架创建 PWA 应用的过程。相关代码 https://github.com/sangyuxiaowu/pwalearn

背景

因为工作上的需要,刚好有跨端和离线缓存的需求,就开始深入研究很早之前就关注的 PWA 技术。也刚好赶上微软、英特尔与谷歌携手举办的“第二届中国 PWA 开发者日”。有幸可以参加这次盛会,在会上,我们看到了很多新的工具和技术。

Progressive Web Application,全称“渐进式网页应用”。理论上来说 APP 可以提供的服务,我们通过 Web 也应该是可以获取,对我来说更直观的感受是以前我们需要转换文件格式(字体,图片,电子书等)需要下载各种的格式转换软件,现在只需要打开一个转换网站。Web 可以说很方便了,相信每个人的 Web 收藏夹里肯定会有成百上千的书签,一个网站就是一个服务。但是相对于桌面的 APP 来说,普通的网站没有独立的入口和离线使用的能力,PWA 技术的出现刚好弥补了这些差距,甚至在某些方面做到了比 APP 更好,毕竟 Web 可以很方便的更新。

众所周知,人间一天,前端一年。Web 早已实现对诸多硬件设备的调用和控制,还记得之前某些操作不支持的时候,我们是通过 CefSharp 或是 Electron 来实现,如今的 Web,已不是当年 IE6 的时代。当前的 Web 不仅可以控制 USB,蓝牙,还可以调用显卡资源,实现 VR 和 XR。

•如果想体验一下 PWA,可以访问 Drawio 绘图应用:https://app.diagrams.net/•如果想回顾“第二届中国 PWA 开发者日”,可访问:https://live.csdn.net/room/MicrosoftReactor/VG6bKaiW•了解更多 Web 能力可前往:https://developer.mozilla.org/zh-CN/docs/Web/API

创建 VUE 项目

我们先使用 npm init vue@latest 创建一个 VUE 的项目,可以按照自己的喜好选择初始的配置。这里使用的工具目前是 Vite ,Vite 号称是下一代的前端工具链,说不定之后又出来了新的。

这里的插件我启用了 TypeScript、JSX、Vue Router、Pinna、ESLint、Prettier。

vue

接下来就很熟悉了,进入目录安装依赖。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd pwaone
npm i

安装 PWA 支持

本来要用 vue add PWA 但是我们使用的是 Vite 工具,直接使用其 PWA 插件就可以了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i vite-plugin-pwa -D

编辑 vite.config.js 配置 vite-plugin-pwa,整体文件修改后如下,如果你没有启用 Jsx 可以去掉相关配置信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { fileURLToPath, URL } from "node:url";

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import { VitePWA } from "vite-plugin-pwa";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    VitePWA({
      manifest: {
        name: "PWA 学习",
        description: "我的第一个 PWA 项目",
        theme_color: "#00bd7e",
        icons: [
          {
            src: "/App_icon192.png",
            sizes: "192x192",
            type: "image/png",
          },
          {
            src: "/App_icon512.png",
            sizes: "512x512",
            type: "image/png",
          },
          {
            src: "/App_icon60.png",
            sizes: "60x60",
            type: "image/png",
          },
        ],
      },
      shortcuts: [
          {
            name: "Open About",
            short_name: "About",
            description: "Open the about page",
            url: "/about",
            icons: [{ src: "/App_icon192.png", sizes: "192x192" }],
          },
          {
            name: "Report issue",
            short_name: "Report",
            description: "Open the issue report page",
            url: "/report",
            icons: [{ src: "/App_icon192.png", sizes: "192x192" }],
          },
        ],
      },
      registerType: "autoUpdate",
      devOptions: {
        enabled: true,
      },
      workbox: {
        globPatterns: ["**/*.{js,css,html,ico,png,svg}"],
      },
    }),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
});

App_icon192.png 这些文件可以自己放不同大小的图片 Logo ,会不同的平台使用,图片我们放在项目中中的 public 目录。

这里我们加入了 2 个任务链接 shortcuts,具体在 Windows 平台的显示形式如下(安卓测试没有显示):

任务栏

开始菜单

更多的 manifest 配置,可以查看 https://developer.mozilla.org/zh-CN/docs/Web/Manifest

打包测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm run build
npx http-server dist

通过打包和启动 http-server 服务器我们就可以在本地访问我们的 PWA 服务了。

通过浏览器的开发者工具,我们可以发现,在 Service Workers 列表中,已经有一个成功注册了。首次访问后,再次访问的可离线的资源也变成由 Service Worker 来响应。我们这里是使用的是插件自行处理的方式,没有写自定义的 sw.js 如果有需求也是可以按照官方文档的说明自己写,然后自行注册的。

Service Workers

下图是缓存存储的情况

缓存

在关闭 http-server 的情况下,我们依然可以访问这个站点,直到我们清除网站数据。

清除缓存

安装与卸载

在电脑端的 Edge 和 Chrome 其安装提示都是在地址栏右边显示一个小按钮,在首次打开网站时会多显示几秒几个诸如 “安装” 的提示文字。下图是在 Edge 点击安装按钮后的效果。

安装提示

安卓系统因使用浏览器的差异,表现也不尽相同,下图使用的是 MIUI 自带的系统浏览器(暗黑模式)。

手机安装提示

电脑在安装后可以直接操作系统的软件管理列表中看到它,可查看详情如下:

软件详情

通过注册表的搜索(大致在 HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages\127.0.0.1-FB67779C_1.0.0.0_neutral__70zmge9146cb2 ),我们可以找到类似如下的软件注册信息:

软件注册表

根据注册表信息,打开软件安装目录,我们可以看到如下的目录结构:

目录结构

也就是说 PWA 的 Windows 安装被打包为了 Windows Store App,除了可以通过浏览器来管理外,我们也可以把它作为普通的软件一样在系统的应用管理里进行操作。

其他相关

经过几番摸索和尝试也发现了一些实际使用中的情况,或许随着时间的推移或因个体差异会有些出入,还请指正,这里就分享出来大家可以做个参考。

1.在微信中打开 PWA 也是可以缓存的,可以离线使用,但是大概40分钟左右就没有了。2.触发浏览器的安装的提醒需要你使用本地 localhost 或 127.0.0.1 来测试,或者直接 https 部署,这点和 web 调用硬件 API 的要求差不多。3.安卓的话,安装的触发还是建议使用系统自带的浏览器打开,手机若使用 edge 或者 chrome,需要授权给应用创建桌面快捷方式的权限。4.如果你有多个项目开发测试,建议你 PWA 测试缓存完毕卸载或是清除缓存,不然某一天你调试新项目会奇怪这个网页到底怎么冒出来的。5.PWA 应用也可以打包为 APP 上架 Store,你可以前往尝试 https://www.pwabuilder.com/ 的在线工具

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 桑榆肖物 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
彩色图像高斯反向投影
彩色图像高斯反向投影 一:介绍 图像反向投影的最终目的是获取ROI然后实现对ROI区域的标注、识别、测量等图像处理与分析,是计算机视觉与人工智能的常见方法之一。图像反向投影通常是彩色图像投影效果会比灰度图像效果要好,原因在于彩色图像带有更多对象细节信息,在反向投影的时候更加容易判断、而转为灰度图像会导致这些细节信息丢失、从而导致分割失败。最常见的是基于图像直方图特征的反向投影。我们这里介绍一种跟直方图反向投影不一样的彩色图像反向投影方法,通过基于高斯的概率分布公式(PDF)估算,反向投影得到对象区域,该方法
OpenCV学堂
2018/04/04
7250
彩色图像高斯反向投影
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
一、霍夫直线变换 1、霍夫直线变换 Hough Line Transform用来做直线检测 前提条件 – 边缘检测已经完成 平面空间到极坐标空间转换 2、霍夫直线变换介绍 对于任意一条直线上的所有点来说 变换到极坐标中,从[0~360]空间,可以得到r的大小 属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线 3、相关API 标准的霍夫变换 cv::HoughLines从平面坐标转换到霍夫空间,最终输出是
MiChong
2020/09/24
3K0
OpenCV图像处理笔记(三):霍夫变换、直方图、轮廓等综合应用
ISP基础(10)-Gamma校正及其实现
图2中左图为原图,中图为gamma = 1/2.2在校正结果,原图中左半侧的灰度值较高,右半侧的灰度值较低,经过gamma = 1/2.2校正后(中图),左侧的对比度降低(见胡须),右侧在对比度提高(明显可以看清面容),同时图像在的整体灰度值提高。
233333
2020/11/24
1.9K0
ISP基础(10)-Gamma校正及其实现
OpenCV源码系列|图像去摩尔纹
摩尔纹 去摩尔纹(不知能否看出区别) 代码实现: #include "opencv2/opencv.hpp" typedef cv::Mat Mat; Mat image_add_border( Mat &src ) { int w=2*src.cols; int h=2*src.rows; std::cout << "src: " << src.cols << "*" << src.rows << std::endl; cv::Mat padded;
用户9831583
2022/06/16
1K0
OpenCV源码系列|图像去摩尔纹
OpenCV中基于Retinex的图像增强实现
美国物理学家埃德温∙兰德(Edwin Land) 在 1971 年提出一种被称为色彩的理论,并在颜色恒常性的基础上提出的一种图像增强方法。Retinex 理论认为物体的颜色是由物体对长波、中波和短波光线的反射能力决定的,而不是由反射光强度的绝对值决定的,即物体的色彩不受光照非均性的影响,具有一致性。
zy010101
2020/03/19
2.4K0
暗通道去雾的好文合集
https://www.cnblogs.com/Imageshop/p/3281703.html https://blog.csdn.net/qq_34902877/article/details/103432959 https://blog.csdn.net/qq_29462849/article/details/84848631 https://www.cnblogs.com/herenzhiming/articles/5280759.html 下面给出第3篇文章中代码的详细注释版本。 首先是头文件 #
zy010101
2020/03/25
3610
OpenCV图像处理笔记(一):图片基本操作
==如果有报无法找到opencv_world343.dll的Error,请把C:\opencv\build\x64\vc14\bin下的opencv_world343.dll文件复制到C:\Windows 目录下即可==
MiChong
2020/09/24
1.5K0
OpenCV图像处理笔记(一):图片基本操作
opencv常用函数
本文主要介绍:Opencv常用函数,如均值、最大最小、归一化、滤波、旋转、求连通域等函数。
vv彭
2020/12/16
1.1K0
OpenCV实战 | Hessian矩阵以及在血管增强中的应用
- 由于本文代码基于OpenCV基础库,所以题目中添加了“OpenCV实现”字样。
OpenCV学堂
2020/01/20
4.3K1
OpenCV实战 | Hessian矩阵以及在血管增强中的应用
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该方法针对图像中不同亮度区域进行亮度补偿,使得整个图像亮度背景趋于一致后,再进行常规的阈值分割。实验结果表明,用该方法能取得良好的分割效果。关于常规的阈值分割不是我这篇推文关注的,我这里只实现前面光照补偿的部分。算法的原理可以仔细看论文。论文原文见附录。
BBuf
2020/02/21
1.1K0
OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》
opencv 图像去雾的C++实现
去雾原理原理是根据何凯明博士的《Single Image Haze Removal Using Dark Channel Prior》这篇文章,介绍见https://www.cnblogs.com/Imageshop/p/3281703.html。及Python代码见:https://blog.csdn.net/wsp_1138886114/article/details/95012769。
zy010101
2020/03/25
1.6K0
基于灰度共生矩阵(GLCM)的图像纹理分析与提取
灰度共生矩阵(Gray Level CO-Occurrence Matrix-GLCM)是图像特征分析与提取的重要方法之一,在纹理分析、特征分类、图像质量评价灯方面都有很重要的应用,其基本原理图示如下:
OpenCV学堂
2020/02/21
8.2K0
使用OpenCV实现偏斜文档校正
使用OpenCV实现偏斜文档校正 纸质文档扫描中经常会发生扫描出来的图像有一定角度的偏斜,对后期的文档信息化OCR提取造成很大的干扰,导致OCR识别准确率下降从而影响文档信息化的结果。这个时候可以使用OpenCV对文档进行纠偏,最常见的文本纠偏算法有两种,分别是 基于FFT变换以后频率域梯度 基于离散点求最小外接轮廓 这两种方法各有千秋,相对来说,第二种方法得到的结果更加准确,第一种基于离散傅立叶变换求振幅的方法有时候各种阈值选择在实际项目中会有很大问题。 基于FFT变换以后频率域梯度 主要思路是先把图像转
OpenCV学堂
2018/04/04
2.6K0
使用OpenCV实现偏斜文档校正
OpenCV实现文字矫正
原始图像 help(argv); CommandLineParser parser(argc, argv, keys); if (parser.has("help")) { help(argv); return 0; } string filename = parser.get<string>(0); Mat img = imread(filename, CV_LOAD_IMAGE_GRAYSCALE); if(
用户9831583
2022/06/16
8650
OpenCV实现文字矫正
OpenCV实现移动图象反模糊
前面发过一篇文章,讲的是如何在频域空间实现图像的离焦模糊恢复,感觉大家很感兴趣,就再来一篇,同样来自OpenCV的官方教程翻译,讲述如何通过OpenCV实现移动对象反模糊,实现特定对象的恢复,先看效果:
OpenCV学堂
2019/06/14
1.3K0
OpenCV实现移动图象反模糊
OpenCV图像处理专栏五 | ACE算法论文解读及实现
这是OpenCV图像处理专栏的第五篇文章,分享一下《Real-time adaptive contrast enhancement for imaging sensors》论文解读及实现,论文地址见附录。本文的算法简称为ACE算法是用来做图像对比度增强的算法。图像对比度增强的算法在很多场合都有用处,特别是在医学图像中,这是因为在众多疾病的诊断中,医学图像的视觉检查时很有必要的。而医学图像由于本身及成像条件的限制,图像的对比度很低。因此,在这个方面已经开展了很多的研究。这种增强算法一般都遵循一定的视觉原则。众所周知,人眼对高频信号(边缘处等)比较敏感。虽然细节信息往往是高频信号,但是他们时常嵌入在大量的低频背景信号中,从而使得其视觉可见性降低。因此适当的提高高频部分能够提高视觉效果并有利于诊断。
BBuf
2019/12/12
1.8K0
OpenCV图像处理专栏五 | ACE算法论文解读及实现
OpenCV 角点检测(二) Harrise
Harrise算子是在Moravec算子的基础上改进得到的,Moravec角点检测算子见链接:http://blog.csdn.net/chaipp0607/article/details/54649235
chaibubble
2022/05/07
2450
OpenCV 角点检测(二) Harrise
java 添加盲水印_OpenCV-图像处理-频域手段添加盲水印
盲水印,顾名思义就是看不见的水印。今天我们来说下频域加盲水印。相信大家做过图像处理的对频域、时域、空间域概念都有了一定的了解。
全栈程序员站长
2022/11/17
2.6K0
java 添加盲水印_OpenCV-图像处理-频域手段添加盲水印
OpenCV实现失焦模糊图像恢复
圆形的PSF因为只有一个半径参数R,是一个非常好的失焦畸变近似,所以算法采用圆形的PSF。
OpenCV学堂
2019/06/03
6.2K1
【手撕算法】FT显著性检测算法
图像在频率域可以分成低频部分和高频部分。低频部分反映了图像的整体信息,如物体的轮廓,基本的组成区域。高频部分反映了图像的细节信息,如物体的纹理。显著性区域检测用到的更多的是低频部分的信息。
周旋
2022/08/07
6940
【手撕算法】FT显著性检测算法
推荐阅读
相关推荐
彩色图像高斯反向投影
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档