vue项目引入PWA(vue-cli4)

2023-05-16

1.概念

PWA 全称为 Progressive Web App,中文译为渐进式 Web APP。
其目的是通过各种 Web 技术实现与原生 App 相近的用户体验。也就是说,只要你使用浏览器,就可以实现免除下载或者是快速下载就能直接使用软件。比如微博、淘宝等。

PWA 是 Google 于 2016 年提出的概念,于 2017 年正式落地,于 2018 年迎来重大突破,全球顶级的浏览器厂商,Google、Microsoft、Apple 已经全数宣布支持 PWA 技术。

PWA 能做到原生应用的体验不是靠特指某一项技术,而是经过应用一些新技术进行改进,在安全、性能和体验三个方面都有很大提升,PWA 本质上是 Web App,借助一些新技术也具备了 Native App 的一些特性,兼具 Web App 和 Native App 的优点。

PWA 特性

  1. 渐进增强 - 能够让每一位用户使用,无论用户使用什么浏览器,因为它是始终以渐进增强为原则。
  2. 响应式用户界面 - 适应任何环境:桌面电脑,智能手机,笔记本电脑,或者其他设备。
  3. 不依赖网络连接 - 通过 service workers 可以在离线或者网速极差的环境下工作。
  4. 类原生应用 - 有像原生应用般的交互和导航给用户原生应用般的体验,因为它是建立在 app shell model 上的。
  5. 持续更新 - 受益于 service worker 的更新进程,应用能够始终保持更新。
  6. 安全 - 通过 HTTPS 来提供服务来防止网络窥探,保证内容不被篡改。
  7. 可发现 - 得益于 W3C manifests 元数据和 service worker 的登记,让搜索引擎能够找到 web 应用。
  8. 再次访问 - 通过消息推送等特性让用户再次访问变得容易。
  9. 可安装 - 允许用户保留对他们有用的应用在主屏幕上,不需要通过应用商店。
  10. 可连接性 - 通过 URL 可以轻松分享应用,不用复杂的安装即可运行。

PWA 优、缺点

优点:

  • 上面提到的,所有这些现代 Web 特性。
  • Web最重要的意义在于开放和去中心化,这才是万维网的初衷

缺点:

  • 门槛不低。部署的服务器要求HTTPS,ServiceWorker涉及API众多,需要单独学习
  • 浏览器支持不够全面。苹果Safari 短时间内不会支持,5 年计划里可能实施
  • 用户体验习惯。网页应用替代原生应用的方式,用户短时间内不适应

知识拓展:应用程序新方式,不用下载就能使用的“PWA”
https://baijiahao.baidu.com/s?id=1728601920743815348&wfr=spider&for=pc

2.vue如何引入PWA

参考:如何在vue项目中使用PWA
https://blog.csdn.net/z858466/article/details/120973969

1.安装依赖

vue add @vue/pwa

会自动在src下生成registerServiceWorker.js文件、自动在main.js中导入,不用管

import './registerServiceWorker'

registerServiceWorker.js的代码如下:

/* eslint-disable no-console */

import { register } from 'register-service-worker'
if (process.env.NODE_ENV === 'production') {
  register(`${process.env.BASE_URL}service-worker.js`, {
    ready () {
      console.log(
        'App is being served from cache by a service worker.\n' +
        'For more details, visit https://goo.gl/AFskqB'
      )
    },
    registered () {
      console.log('Service worker has been registered.')
    },
    cached () {
      console.log('Content has been cached for offline use.')
    },
    updatefound () {
      console.log('New content is downloading.')
    },
    updated () {
      console.log('New content is available; please refresh.')
    },
    offline () {
      console.log('No internet connection found. App is running in offline mode.')
    },
    error (error) {
      console.error('Error during service worker registration:', error)
    }
  })
}

2.vue.config.js配置pwa

module.exports = {
	pwa: {
	   workboxOptions: {
	      skipWaiting: true,
	      clientsClaim: true,
	      importWorkboxFrom: 'local',
	      importsDirectory: 'js',
	      navigateFallback: '/',
	      navigateFallbackBlacklist: [/\/api\//]
	   }
  }
}

3.public下创建manifest.json文件,pwa的添加至桌面的功能主要就是依赖于这个文件

{
  "short_name": "短名称", // 用来描述应用的短名字。当应用的名字过长,在桌面图标上无法全部显示时,会用short_name中定义的来显示。
  "name": "iDL-科研平台", // 用来描述应用的名称,会显示在各类提示的标题位置和启动画面中。
  "icon": [  // 用来设置Web App的图标集合。
      {
       "src": "./img/icons/android-chrome-192x192.png",
       "sizes": "192x192",
       "type": "image/png"
      },
      {
       "src": "./img/icons/android-chrome-512x512.png",
       "sizes": "512x512",
       "type": "image/png"
      }
  ],
  "start_url": "index.html", // 用来描述当用户从设备的主屏幕点击图标进入时,出现的第一个画面。
  "display": "standalone", // 用来指定 Web App 从主屏幕点击启动后的显示类型
  "background_color": "#002140", // 用来设置Web App启动画面的背景颜色
  "theme_color": "#002140" // 定义和background_color一样的CSS颜色值,用于显示Web App的主题色,显示在banner位置。
}

更错manifest.json文件详细配置请参考:
https://juejin.cn/post/6844903543615258632

4.public/index.html下添加

<meta name="theme-color" content="#00142A">

5.build一下,看看生成的dist文件夹下的index.html有没有引用manifest.json

<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#4DBA87">

如果有,则基本配置已完成。下面就是看实际效果了:
上述步骤可能会遇到的问题:
(1)Unexpected token / in JSON at position
解决办法:新增的manifest.json去除所有//注释
(2)手动新增的manifest.json有eslint红色报错
解决办法:将VScode右下角的JSON with Comments 即可
在这里插入图片描述
在这里插入图片描述
3.F12查看Application时,Service Workers没有内容
解决办法:说明没有正确的注册Service Workers,注意registerServiceWorker.js下的register(${process.env.BASE_URL}service-worker.js路径问题,看看你的代码下process.env.NODE_ENV的值以及有没有process.env.BASE_URL
最终看效果需要到https下看,所以部署上线的时候这个地方要注意

注册成功时应该是这个样子:
在这里插入图片描述
在这里插入图片描述
4.localhost下看不到下载安装图标?
听别人说localhost是可以,但我遇到的实际是不行,需要项目部署到https下
请添加图片描述
5.可以愉快的看效果了,https访问你的项目,可以看到有安装按钮了
在这里插入图片描述

更多文章参考:
1.渐进式 Web 应用(PWA)
2.PWA(Progressive Web App)入门系列:(一)PWA简介
3.PWA(Progressive Web App)入门系列:(二)相关准备
4.PWA(Progressive Web App)入门系列:(三)PWA关键技术Manifest
5.PWA(Progressive Web App)入门系列:(四)Promise
6.PWA(Progressive Web App)入门系列:(五)Web Worker

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue项目引入PWA(vue-cli4) 的相关文章

  • 在 Linux 平台中调试 C/C++ 内存泄漏方法

    由于 C 和 C 43 43 程序中完全由程序员自主申请和释放内存 xff0c 稍不注意 xff0c 就会在系统中导入内存错误 同时 xff0c 内存错误往往非常严重 xff0c 一般会带来诸如系统崩溃 xff0c 内存耗尽这样严重的后果
  • Java 位运算

    Java 位运算 转 一 xff0c Java 位运算 1 表示方法 xff1a 在Java语言中 xff0c 二进制数使用补码表示 xff0c 最高位为符号位 xff0c 正数的符号位为0 xff0c 负数为1 补码的表示需要满足如下要求

随机推荐

  • iOS学习之UINavigationController详解与使用(一)添加UIBarButtonItem

    1 UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器 xff0c 在iOS里经常用到 我们看看它的如何使用 xff1a 下面的图显示了导航控制器的流程 最左侧是
  • OpenStack多节点部署(一)——服务器选型

    OpenStack多节点部署 xff08 一 xff09 服务器选型 OpenStack多节点部署 xff08 二 xff09 操作系统安装 OpenStack多节点部署 xff08 三 xff09 网络配置 OpenStack多节点部署
  • 【代码】使用C++实现改进的有效边表算法。

    算法的解释和一些细节晚一些再上传 xff0c 先直接上代码 xff1a 如果有错误可以在评论区指出 由于opengl使用实数的坐标 xff0c 所以 xff0c 本程序将使用画线代替画点 include lt GL glut h gt in
  • FireFox导入导出Cookies和收藏夹的方法

    FireFox是一个常用的浏览器 xff0c 扩展插件众多 xff0c 和IE相比有很多优点 xff0c 不过有些细小的地方似乎考虑的不太好 xff0c 比如用户经常会碰到系统重新安装等问题 xff0c 这就需要导入导出FireFox浏览器
  • linux交换分区回收

    author xff1a skate time xff1a 2012 04 11 交换分区回收 如果系统过多的使用交换分区 xff0c 那性能将会变慢 xff0c 所以要找到大量使用交换分区的原因 回收交换分区可以用如下 xff1a swa
  • Linux下查看文件和文件夹大小的df和du命令

    当磁盘大小超过标准时会有报警提示 xff0c 这时如果掌握df和du命令是非常明智的选择 df可以查看一级文件夹大小 使用比例 档案系统及其挂入点 xff0c 但对文件却无能为力 du可以查看文件及文件夹的大小 两者配合使用 xff0c 非
  • 算法系列之九:计算几何与图形学有关的几种常用算法(一)

    我的专业是计算机辅助设计 xff08 CAD xff09 xff0c 算是一半机械一半软件 xff0c 计算机图形学 是必修课 xff0c 也是我最喜欢的课程 热衷于用代码摆平一切的我几乎将这本教科书上的每种算法都实现了一遍 xff0c 这
  • uiviewController管理UITableView

    iOS开发 xff1a 如何作为子类来创建和管理UITableView 已有 184 次阅读 2011 10 24 21 38 标签 UIViewController UIView UITableView iOS 在iPhone应用开发中个
  • 【Iphone 游戏开发之一】创建视图并绘制简单图形

    Himi 原创 xff0c 转载请注明 xff01 原文地址 xff1a http blog csdn net xiaominghimi article details 6633172 这段时间N忙 xff0c 没办法 xff0c 创业公司
  • archlinux中virtualbox无法运行问题解决

    在archlinux中安装完成virtualbox后 xff0c 新建虚拟机无法启动 xff0c 而是出现下图的提示 xff1a 在fedora中直接用root权限运行 etc init d vboxdrv setup重新加载一下驱动就可以
  • 【Linux】Ubuntu 代理配置

    apt get 设置代理 proxy 方法 方法一 xff1a 这是一种临时的手段 xff0c 如果你仅仅是暂时需要通过http代理使用apt get xff0c 你可以使用这种方法 在使用 apt get 之前 xff0c 在终端中输入以
  • 百度之星之E:C++ 与Java

    E C 43 43 与Java 时间限制 2000ms 内存限制 65536kB 描述 在百度之星的贴吧里面 xff0c Java的爱好者和C 43 43 的爱好者总是能为这两种语言哪个更好争论上几个小时 Java的爱好者会说他们的程序更加
  • 并查集详解

    并查集是我暑假从高手那里学到的一招 xff0c 觉得真是太精妙的设计了 以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定 不分享出来真是对不起party了 xff08 party xff1a 我靠 xff0c 关我嘛事啊 xff1f
  • ubuntu18.04 开启ssh远程服务

    1 查看ssh服务是否已经开启 说明 xff1a 1 ssh agent 指的是ubuntu的ssh服务的客户端 xff0c 用于该ubuntu远程连接其它Linux主机 如果没有ssh agent的话 xff0c 该ubuntu主机也无法
  • Python必备知识之“if __name__ == ‘__main__‘:”

    在学习Python的过程中经常会看到 if name 61 61 39 main 39 这行代码 xff0c 那么这行代码的作用究竟是什么呢 xff1f if name 61 61 39 main 39 这行代码的主要作用是调试某个模块的正
  • Windows Server 网络连接由公用网络改为专用网络

    主题 xff1a Windows Server 网络连接由公用网络改为专用网络 关键字 xff1a 问题描述 xff1a Windows Server 2012 r2 启动后网络连接被识别为公用网络 xff0c 导致远程桌面等服务无法使用
  • 关于书籍(WPF及其它)

    原文 xff1a On Books WPF and Otherwise 有人让我去看coding horror comparison xff0c 这篇文章来至于Charles Petzold和Adam Nathan的书籍 xff0c 是关于
  • pip,pip安装源

    介绍 Python在使用pip安装第三方包 第三方功能库的时候 xff0c pip3 pip install xxx走的是国外源 xff0c 有点慢 我们可以采用国内源加快下载的速度 常用pip源 xff1b 豆瓣 xff1a https
  • 安装Anaconda时安装路径错误,提示Directory" xxx is not empty ,please choose a different location."问题的解决方案

    错误如下图所示 重新选择路径 xff0c 选择平时安装的盘 xff0c 然后手动输入Anaconda xff0c 即可正常安装 xff08 在这一步之前一定要删除卸载 先前安装产生的文件夹 xff09 进QQ群 xff08 77980901
  • vue项目引入PWA(vue-cli4)

    1 概念 PWA 全称为 Progressive Web App xff0c 中文译为渐进式 Web APP 其目的是通过各种 Web 技术实现与原生 App 相近的用户体验 也就是说 xff0c 只要你使用浏览器 xff0c 就可以实现免