首页 > 其他分享 >umijs或者webpack配置pwa

umijs或者webpack配置pwa

时间:2023-05-18 09:48:35浏览次数:36  
标签:Service pwa Worker js webpack umijs PWA UMI response

UMI.js 实现 PWA

UMI.js 是一个可扩展的企业级前端应用框架,它包含了许多优秀的插件,可以快速搭建起一个高质量的前端应用。UMI.js 提供了 umi-plugin-pwa 插件,可以很方便地实现 PWA。

  1. 安装 umi-plugin-pwa 插件

在 UMI.js 项目中执行以下命令安装 umi-plugin-pwa 插件:

 
npm install umi-plugin-pwa --save-dev
  1. 在路由配置文件中配置 PWA

config/config.js 文件中添加如下配置,声明需要添加 PWA 功能:

 
export default {
  plugins: [
    ['umi-plugin-pwa', {
      // 这里进行 PWA 配置
    }]
  ]
}
  1. 配置 manifest.json

在根目录下新建一个名为 public/manifest.json 的文件,并输入以下内容:

 
{
  "name": "My App",
  "short_name": "My App",
  "start_url": ".",
  "display": "standalone",
  "background_color": "#fff",
  "theme_color": "#007bff",
  "icons": [
    {
      "src": "./favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    }
  ]
}

上述代码定义了应用的名称、启动 URL、显示方式、背景色、主题色以及图标等信息。

  1. 配置 ServiceWorker

src 目录下新建一个名为 sw.js 的文件,并输入以下内容:

 
const CACHE_NAME = 'my-app-cache-v1'
const urlsToCache = [
  '/',
  '/index.html',
  '/manifest.json'
]

self.addEventListener('install', event => {
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => cache.addAll(urlsToCache))
  )
})

self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request)
      .then(response => {
        if (response) {
          return response
        }
        return fetch(event.request)
          .then(response => {
            if (!response || response.status !== 200 || response.type !== 'basic') {
              return response
            }
            const responseToCache = response.clone()
            caches.open(CACHE_NAME)
              .then(cache => cache.put(event.request, responseToCache))
            return response
          })
      })
  )
})

上述代码定义了一个名为 my-app-cache-v1 的 Cache Storage,将 urlsToCache 数组中的资源进行缓存,同时使用 Service Worker 拦截网络请求,如果已有缓存,则直接返回缓存内容;如果没有缓存,则发起网络请求,并将响应内容进行缓存。

  1. 在 HTML 文件中注册 Service Worker

在应用入口的 HTML 文件中添加以下代码,用于注册 Service Worker:

 
<script>
  if ('serviceWorker' in navigator) {
    window.addEventListener('load', () => {
      navigator.serviceWorker.register('/sw.js')
        .then(registration => {
          console.log('ServiceWorker registration successful with scope: ', registration.scope)
        })
        .catch(err => {
          console.log('ServiceWorker registration failed: ', err)
        })
    })
  }
</script>

上述代码通过 navigator.serviceWorker.register() 方法注册 Service Worker,并在控制台中输出注册结果。

通过以上步骤,就可以在 UMI.js 项目中实现 PWA。

Webpack 实现 PWA

Webpack 是一个非常流行的前端项目构建工具,它也可以很方便地进行 PWA 配置。

  1. 安装插件

在 Webpack 项目中执行以下命令安装插件:

 
npm install workbox-webpack-plugin --save-dev
  1. 在 Webpack 配置文件中配置 PWA

在 Webpack 的配置文件中添加以下代码:

 
const path = require('path')
const { GenerateSW } = require('workbox-webpack-plugin')

module.exports = {
  plugins: [
    new GenerateSW({
      clientsClaim: true,
      skipWaiting: true
    })
  ]
}

上述代码使用了 workbox-webpack-plugin 插件,并通过 GenerateSW 类配置 PWA 相关的选项。clientsClaim: true 表示新的 Service Worker 激活后立即掌控所有页面,而不是需要等待页面关闭才能生效;skipWaiting: true 表示当有新的 Service Worker 可用时,立即让其取得控制权。

  1. 配置 manifest.json

在根目录下新建一个名为 public/manifest.json 的文件,与 UMI.js 示例中的代码类似,在此处配置应用的基本信息。

  1. 配置 ServiceWorker

src 目录下新建一个名为 sw.js 的文件,并输入与 UMI.js 示例中的代码类似的内容。

  1. 在 HTML 文件中注册 Service Worker

与 UMI.js 示例中相同,在 HTML 文件中注册 Service Worker 并输出注册结果的信息。

通过以上步骤,就可以在 Webpack 项目中实现 PWA。

 

标签:Service,pwa,Worker,js,webpack,umijs,PWA,UMI,response
From: https://www.cnblogs.com/cczlovexw/p/17410948.html

相关文章

  • webpack搭建typescript项目
    基于webpack的typescript项目搭建该项目是搭建了一个数值转换的前端项目,使用了webpack,typescript重点学习webpack.config.js的配置/Users/song/Code/webgpu_learn/webgpu-for-beginners/03typescript/finished/index.html<!DOCTYPEhtml><htmllang="en"><head><m......
  • Stopwatch 类来测量时间间隔
    使用Stopwatch类来测量时间间隔。以下是一个示例代码,展示如何记录Excel导入的用时:'创建Stopwatch实例DimstopwatchAsNewStopwatch()'开始计时stopwatch.Start()'执行Excel导入操作'...'停止计时stopwatch.Stop()'获取经过的时间DimelapsedTime......
  • webpack总结学习
    1.两种开发模式开发模式:代码能编译自动化运行生产模式:代码编译优化输出2.webpack基本功能开发模式:可以编译ESModule语法生产模式:可以编译ESModule语法,压缩js代码3.Webpack配置文件entry:入口文件 打包开始路径output:输出文件 打包输出的路径loader:本身只能处理jsj......
  • webpack的学习与使用(安装时以管理员身份运行)
    1、安装webpack2、测试是否安装成功3、写入相应代码之后,进行webpack打包自动新增一个文件夹:4、将bundle.js文件写入html页面打开浏览器查看结果:......
  • 快速上手UmiJs
    先找个地方建个空目录mkdirmyapp&&cdmyapp通过官方工具创建项目yarncreate@umijs/umi-app#或npx@umijs/umi-appCopy:.editorconfigWrite:.gitignoreCopy:.prettierignoreCopy:.prettierrcWrite:.umirc.tsCopy:mock/.gitkeepWrite:package.json......
  • Webpack 面试题
    一、Webpack如何解决跨域问题?(三种方式)来源1.使用代理:服务端是别人的,使用这个方式devServer:{proxy:{//重写的方式,把请求代理到express服务器上'/api':{target:'http://localhost:3000',pathRewrite:{'/api':''}//若请求路径为/......
  • chatGPT问答之 Webpack 5 多入口打包如何指定打包文件名规定的文件名
    前言chatGPT越来越令人惊奇,有一些答案在百度上搜半天却找不到你想要的,但与chatGPT的聊天中就可以非常快的得到你想要的结果,不得不说人工智能很好用下面就是我与chatGPT的聊天内容chatGPT问答之Webpack5多入口打包如何指定打包文件名规定的文件名问1:Webpack5多入口打包如......
  • chatGTP对webpack4与webpack5的区别的分析
    chatGTP对webpack4与webpack5的区别的分析问1:webpack5与webpack4主要的区别是什么?chatGTP的回答Webpack5与Webpack4的主要区别如下:性能优化:Webpack5在构建速度和性能方面进行了大量的优化,从而可以更快地构建应用程序和库。TreeShaking:Webpack5对TreeShaking进行了改进......
  • qiankun vue子应用升级webpack5问题记录
    升级的方式是使用最新版本的vue-cli脚手架,重新创建一个新项目,然后复制@vue/cli-xxx,vue相关依赖最新版本到子应用项目->核对babel,eslint相关配置的变化->重新安装依赖,处理出现的相各种异常情况->启动项目检查功能是否正常。本次升级主要是为了使用webpack5。以下......
  • 如何使用Webpack工具构建项目
    起步webpack用于编译JavaScript模块。一旦完成 安装,你就可以通过webpack CLI 或 API 与其配合交互。如果你还不熟悉webpack,请阅读 核心概念 和 对比,了解为什么要使用webpack,而不是社区中的其他工具。运行webpack5的Node.js最低版本是10.13.0(LTS)。基本......