Vue 中的渐进式网络应用
使用 Vite 将 Vue 应用转换为 PWA
PWA 的两个主要要求是 Service Worker 和 Web 应用清 单。虽然可以手动将这两者添加到应用中,但我们建议使用 Vite PWA 插件。
首先,安装 vite-plugin-pwa 包:
npm install -D vite-plugin-pwa
接下来,更新你的 vite.config.js 或 vite.config.ts 文件并添加 vite-plugin-pwa:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { VitePWA } from 'vite-plugin-pwa';
export default defineConfig({
plugins: [vue(), VitePWA({ registerType: 'autoUpdate' })],
});
这个最小配置允许你的应用在构建时生成 Web 应用清单和 Service Worker。
有关配置 Vite PWA 插件的更多信息,请参阅 Vite PWA "入门"指南。
有关如何部署 PWA 的信息,请参阅 Vite PWA "部署"指南。
使用 Vue CLI 将 Vue 应用转换为 PWA
从 Ionic CLI v7 开始,Ionic Vue 起始项目使用 Vite 替代了 Vue CLI。Vite 的使用说明请参见 使用 Vite 将 Vue 应用转换为 PWA。
PWA 的两个主要要求是 Service Worker 和 Web 应用清单。虽然可以手动将这两者添加到应用中,但 Vue CLI 提供了一些工具来为你添加这些功能。
对于现有项目,你可以运行 vue add 命令来安装 Vue 的 PWA 插件。
vue add pwa
如果你已经进行了更改,请确保在 Git 中提交它们。
完成此操作后,Vue 的 CLI 将创建一个新的 registerServiceWorker.ts 文件并将其导入到我们的 main.ts 中。
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
// 由 CLI 添加
import './registerServiceWorker';
createApp(App).use(router).mount('#app');
registerServiceWorker.ts 文件将指向一个 Service Worker,该 Service Worker 将在构建时由 CLI 创建。在这里,我们可以自定义当 Service Worker 检测到更新、网络连接变化或接收到错误时用户的体验。
import { register } from 'register-service-worker';
if (process.env.NODE_ENV === 'production') {
register(`${process.env.BASE_URL}service-worker.js`, {
ready() {
console.log(
'应用正由 Service Worker 从缓存中提供服务。\n' + '更多详情,请访问 https://goo.gl/AFskqB'
);
},
registered() {
console.log('Service Worker 已注册。');
},
cached() {
console.log('内容已缓存以供离线使用。');
},
updatefound() {
console.log('正在下载新内容。');
},
updated() {
console.log('有新内容可用;请刷新。');
},
offline() {
console.log('未找到互联网连接。应用正在离线模式下运行。');
},
error(error) {
console.error('Service Worker 注册期间发生错误:', error);
},
});
}
生成的 Service Worker 基于 Workbox 的 webpack 插件,默认设置为使用 GenerateSW()。这意味着在构建时,Workbox 将自动为它处理的所有文件生成一个 Service Worker 缓存。