如何将 Vite + React 应用配置为渐进式 Web 应用(PWA)

小芳同学_2662

小芳同学_2662

2026-10-10

733人浏览

原创

如何将 Vite + React 应用配置为渐进式 Web 应用(PWA)

本文详细讲解如何使用 vite-plugin-pwa 为 vite 构建的 react 项目添加 pwa 支持,涵盖插件配置、图标资产生成、manifest 定义及 html 集成,确保应用可通过 chrome 等浏览器正确识别并触发「添加到桌面」安装提示。

本文详细讲解如何使用 vite-plugin-pwa 为 vite 构建的 react 项目添加 pwa 支持,涵盖插件配置、图标资产生成、manifest 定义及 html 集成,确保应用可通过 chrome 等浏览器正确识别并触发「添加到桌面」安装提示。

要让基于 Vite 的 React 应用真正成为可安装的渐进式 Web 应用(PWA),仅安装 vite-plugin-pwa 并简单配置是不够的——还需满足 PWA 的三大核心条件:HTTPS(或 localhost)、有效的 Web App Manifest 文件、注册 Service Worker。本地开发时虽不强制 HTTPS,但 Chrome 仅在 localhost 或安全上下文(如 https://)中显示安装按钮,因此务必确认运行环境合规。

✅ 步骤一:安装依赖

首先安装主插件及推荐的图标生成工具(用于自动生成多尺寸 PWA 图标):

npm install -D vite-plugin-pwa @vite-pwa/assets-generator

⚠️ 注意:@vite-pwa/assets-generator 是独立 CLI 工具,非 vite-plugin-pwa 的子模块,需单独安装。

✅ 步骤二:配置 vite.config.ts

在 vite.config.ts 中启用插件,并完整定义 manifest 及资源策略:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { VitePWA } from 'vite-plugin-pwa'

export default defineConfig({
  plugins: [
    react(),
    VitePWA({
      registerType: 'autoUpdate', // 自动检查更新并激活新 SW
      includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'mask-icon.svg'],
      manifest: {
        name: 'My Vite PWA',
        short_name: 'VitePWA',
        description: 'A blazing-fast PWA built with Vite and React',
        theme_color: '#4f46e5',
        background_color: '#ffffff',
        display: 'standalone',
        start_url: '/',
        icons: [
          {
            src: 'pwa-64x64.png',
            sizes: '64x64',
            type: 'image/png',
          },
          {
            src: 'pwa-192x192.png',
            sizes: '192x192',
            type: 'image/png',
          },
          {
            src: 'pwa-512x512.png',
            sizes: '512x512',
            type: 'image/png',
            purpose: 'any',
          },
          {
            src: 'maskable-icon-512x512.png',
            sizes: '512x512',
            type: 'image/png',
            purpose: 'maskable',
          },
        ],
      },
      workbox: {
        globPatterns: ['**/*.{js,css,html,ico,png,svg}'],
      },
    }),
  ],
  base: './', // 确保构建路径为相对路径,适配静态托管
})

✅ 步骤三:生成 PWA 图标资产

PWA 要求提供多种尺寸与用途的图标(如普通 icon、Apple Touch Icon、maskable icon)。推荐使用 SVG 源文件生成:

Ink — React for interactive command-line apps.
Ink — React for interactive command-line apps.

Ink — 用 React 开发交互式命令行应用,使用 React组件构建丰富的终端 UI。

下载
  1. 将你的 logo 保存为 public/logo.svg(建议纯色、无背景、居中构图);
  2. 在 package.json 中添加脚本:
{
  "scripts": {
    "generate-pwa-assets": "pwa-assets-generator --preset minimal public/logo.svg"
  }
}
  1. 运行命令生成图标:
npm run generate-pwa-assets

执行后,public/ 目录下将自动生成 pwa-*.png、maskable-icon-*.png、apple-touch-icon-*.png 等文件。

✅ 步骤四:完善 index.html 头部声明

在 index.html 的 中显式声明关键元信息与链接,确保浏览器能准确解析 PWA 元数据:

  <meta charset="utf-8"><link rel="icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon-180x180.png" sizes="180x180"><link rel="mask-icon" href="/mask-icon.svg" color="#4f46e5"><meta name="theme-color" content="#4f46e5"><!-- 其他 meta 标签 -->

? 提示:<link rel="manifest" ...> 无需手动添加 — vite-plugin-pwa 会自动注入 <link rel="manifest" href="/manifest.webmanifest">。

✅ 验证与调试

  • 本地开发验证:运行 npm run dev,打开 http://localhost:5173 → 打开 Chrome DevTools → Application 标签页 → 查看 Manifest 和 Service Workers 是否加载成功;
  • 安装条件检查:Chrome 地址栏右侧应出现「+」图标(“Install” 按钮),前提是:
    • 页面已加载完成;
    • manifest 符合规范(name、icons、start_url 存在且可访问);
    • Service Worker 已激活(状态为 activated);
    • 当前页面满足「安装提示阈值」(通常需用户与页面有至少 30 秒交互)。
  • 生产环境部署:使用 npm run build 后,用 npx serve -s dist 启动静态服务(⚠️ 不要用 http-server,它默认不支持 SPA 回退路由,可能导致 manifest 路径 404)。

? 总结

PWA 集成不是“一配即装”,而是系统性工程:
✅ 正确配置 vite-plugin-pwa 插件;
✅ 使用 @vite-pwa/assets-generator 生成标准化图标;
✅ 在 index.html 中补全所有 <link> 和 <meta> 声明;
✅ 构建后通过 serve -s 部署并验证 manifest / SW 加载;
✅ 确保应用满足 Chrome 的安装启发式规则(用户参与度、HTTPS/localhost、响应式设计)。

完成以上步骤后,你的 Vite + React 应用即可作为真正意义上的 PWA 被用户一键安装,享受离线可用、推送通知、桌面快捷方式等原生体验。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

4686

5

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

2023.07.04

1169

3

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

2023.07.04

4624

6

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

920

4

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

1836

5

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

2023.09.04

3345

4

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

2023.09.12

4333

6

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

2023.09.20

2840

5

java访问控制修饰符介绍
java访问控制修饰符介绍

java访问控制修饰符有四种,分别是public、protected、private、默认访问修饰符。详细介绍:1、public,public是最宽松的访问控制修饰符,被修饰的类、方法和变量可以被任何其他类访问,当一个类、方法或变量被声明为public时,它们可以在任何地方被访问,无论是同一个包中的类还是不同包中的类;2、protected修饰符等等。

2023.09.20

908

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习