React 中的渐进式 Web 应用
将您的 React 应用制作成 PWA
PWA 的两个主要要求是 Service Worker 和 Web Manifest。虽然可以手动将这两者添加到应用中,但来自 Create React App(CRA)和 Ionic CLI 的基础项目已经提供了这些。
在应用的 index.ts 中,有一个对 serviceWorker.unregister() 函数的调用。CRA 提供的基础将 service worker 作为可选功能,因此需要启用它。要启用它,请调用 serviceWorker.register()。
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
import * as serviceWorkerRegistration from './serviceWorkerRegistration';
const container = document.getElementById('root');
const root = createRoot(container!);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
// 如果您希望应用离线工作并加快加载速度,可以将下面的
// unregister() 改为 register()。注意这有一些潜在问题。
// 了解更多关于 service worker 的信息:https://cra.link/PWA
serviceWorkerRegistration.register();
添加此包后,运行 ionic build,build 目录就可以作为 PWA 部署了。
默认情况下,react 应用包附带 Ionic 标志作为应用图标。请务必更新 manifest 以使用正确的应用名称并替换图标。
Service Worker 和许多 JavaScript API(如 geolocation)等功能要求应用托管在安全上下文中。通过托管服务部署应用时,请注意需要 HTTPS 才能充分利用 Service Worker。
Service Worker 配置
默认情况下,CRA/React Scripts 附带基于 Workbox 的 Webpack 插件 的预配置 Service Worker 设置。它采用缓存优先策略,这意味着即使网络返回了更新版本的应用,您的应用也会从缓存中加载。
由于 CRA/React Scripts 的特性,其配置是 React Scripts 内部的,这意味着除非从 React Scripts 弹出(eject),否则无法自定义。目前,Ionic CLI 不支持弹出的 React 应用,因此如果执行此操作,您需要使用 npm/yarn 脚本代替 Ionic CLI。
部署
Firebase
Firebase 托管为渐进式 Web 应用提供了许多优势,包括得益于 CDN 的快速响应时间、默认启用 HTTPS 以及对 HTTP2 push 的支持。