webpack 中使用 workbox 实现 PWA

news/2024/7/10 0:01:47 标签: pwa, workbox, webpack, react, vue

webpack-中使用-workbox-实现-pwa">webpack 中使用 workbox 实现 PWA

说明

重要文件版本

webpack 提供了 workbox 插件 workbox-webpack-plugin

webpack-中使用">webpack 中使用

在 production 版本配置中使用

1. 在入口 html 模板中引入

<!DOCTYPE html>
<html lang="en">

   <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
      <title>webpack-react-template</title>
      <!-- 引入 manifest 文件 -->
      <link rel="manifest" href="./manifest.json">
   </head>

   <body>
      <div id="app"></div>
      <script>
        // 进行 service-wroker 注册
        if ('serviceWorker' in navigator) {
            window.addEventListener('load', () => {
                navigator.serviceWorker
                    .register('./service-wroker.js')
                    .then(registration => {
                        console.log('SW registered: ', registration);
                    })
                    .catch(registrationError => {
                        console.log('SW registration failed: ', registrationError);
                    });
            });
        }
      </script>
   </body>

</html>

webpackprodconfigjs-中进行-webpack-配置">2. webpack.prod.config.js 中进行 webpack 配置

const WorkboxPlugin = require('workbox-webpack-plugin');

module.exports = merge(baseWebpackConfig, {
    // ... 省略其他配置
    plugins: [
        // ... 省略其他配置

        /*
            这里也可以使用 WorkboxPlugin.InjectManifest({}) 配置
            但是需要 配置 swSrc 指明模板 service-worker 文件
            WorkboxPlugin.GenerateSW({}) 可以直接生成 service-worker 文件
         */
        new WorkboxPlugin.GenerateSW({
            cacheId: 'webpack-pwa', // 设置前缀
            skipWaiting: true, // 强制等待中的 Service Worker 被激活
            clientsClaim: true, // Service Worker 被激活后使其立即获得页面控制权
            swDest: 'service-wroker.js', // 输出 Service worker 文件
            globPatterns: ['**/*.{html,js,css,png.jpg}'], // 匹配的文件
            globIgnores: ['service-wroker.js'], // 忽略的文件
            runtimeCaching: [
                // 配置路由请求缓存
                {
                    urlPattern: /.*\.js/, // 匹配文件
                    handler: 'networkFirst' // 网络优先
                }
            ]
        })
    ]
});

注意:配置路由请求缓存,请看另外一篇文章

3. 转移 manifest.json 以及需要的图片

我这里使用了 copy-webpack-plugin 插件用于文件转移

new CopyWebpackPlugin([
    {
        from: 'src/manifest.json',
        to: 'manifest.json'
    },
    {
        from: 'src/icon.png',
        to: 'static/imgs/icon.png'
    }
]);

4. 编译后生成的 service-worker 文件

importScripts(
    'https://storage.googleapis.com/workbox-cdn/releases/3.0.0/workbox-sw.js'
);

importScripts('/test/precache-manifest.14cde9ce3f3a728b83652a5461e9fd24.js');

workbox.core.setCacheNameDetails({ prefix: 'webpack-pwa' });

workbox.skipWaiting();
workbox.clientsClaim();

self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});

workbox.routing.registerRoute(
    /.*\.js/,
    workbox.strategies.networkFirst(),
    'GET'
);

相关

其他相关

  • 使用 workbox 协助构建 PWA 应用
  • PWA 渐进式网络应用 - 1 - 简介及调试方法
  • PWA 渐进式网络应用 - 2 - 使用 Service Workers
  • PWA 渐进式网络应用 - 3 - manifest.json 添加应用至桌面
  • PWA 渐进式网络应用 - 4 - 推送通知

http://www.niftyadmin.cn/n/660707.html

相关文章

node.js 线上服务部署

Node.js 线上服务部署 注意&#xff1a;以下文章没有设么逻辑&#xff0c;只是对一下线上部署的记录 1. 阿里云域名服务器购买 2. 远程登录 进入命令行输入 ssh 用户名公网 IP ssh root47.XX.139.XX切换到英文输入法 按照提示输入 yes输入密码fdisk -l 查看挂载硬盘df -h 查看…

管理信息系统的开发与管理

{% extends lx3.html %} {% block registertitle %}发布{% endblock %}{% block registerhead %}<script type"text/javascript" src"../static/js/js.js"></script>{% endblock %}<link href"https://maxcdn.bootstrapcdn.com/bootst…

阿里云服务器

阿里云服务器 注意&#xff1a;以下文章没有逻辑&#xff0c;只是看了阿里云使用的视频做的记录。 简介 云服务器 简称 ECS &#xff0c;是一种简单高效、处理能力可弹性伸缩的计算服务&#xff0c;降低硬件和运维的成本 基于阿里云自主研发的大规模分布式计算系统&#xff0c;…

结巴分词

在采集美女站时,需要对关键词进行分词,最终采用的是python的结巴分词方法. 中文分词是中文文本处理的一个基础性工作&#xff0c;结巴分词利用进行中文分词。其基本实现原理有三点&#xff1a; 基于Trie树结构实现高效的词图扫描&#xff0c;生成句子中汉字所有可能成词情况所构…

Linux图形栈-从X到Wayland

1980年代初&#xff0c;麻省理工学院计算机科学系(以下简称MIT)的Bob Scheifler 着手为新的窗口系统制定规则。他决定取名为X&#xff0c;因为此窗口系统是基于W窗口系统的一个改进&#xff0c;W窗口系统源于V系统。X窗口系统将掀起一场图形领域的革命。当时X确实成为了所有类U…

nginx 使用入门

Nginx 使用入门 说明 Nginx 是一个开源、高效可靠的 HTTP 服务器和反向代理&#xff1b;Nginx 有一个主线程和几个工作线程&#xff0c;主线程的目的是加载和验证配置文件、维护工作线程&#xff0c;工作线程用来处理实际的请求&#xff0c;其数量可配置&#xff0c;也可以自动…

2 将mybatis配置到springmvc中

为了更方便的连接数据库&#xff0c;将mybatis配置到springMVC中 1&#xff09;. 首先是jar包 多了3个jar druid 这个是阿里的数据库连接包 mybatis和 mybatis-spring 2&#xff09; 然后是项目目录 3&#xff09;在web.xml中 加上一个spring的配置文件 <conte…

(五)5-3Python正则表达式

正则对象的方法 1、match 方法 import re reg re.compile(r(hello w.*)(hello cn.*)) a hello world hello cnblogs result reg.match(a) print(result)b "aa" a print(b) result2 reg.match(b) print(result2) 运行结果&#xff1a; <_sre.SRE_Match obje…