[next.js]pwa缓存

news2025/1/23 2:10:12

配置Next.js (v14+ App Router模式) 使其支持PWA缓存,配置server worker和mainfest.json,让项目支持离线访问和可安装。

安装依赖next-pwa

npm i next-pwa

配置next.config.js

const path = require('path');

const withPWAInit = require('next-pwa');

// 判断环境
const isProd = ['production'].includes(process.env.NODE_ENV);

/** @type {import('next-pwa').PWAConfig} */
const withPWA = withPWAInit({
  dest: 'public',
  disable: !isProd,
  // Solution: https://github.com/shadowwalker/next-pwa/issues/424#issuecomment-1399683017
  buildExcludes: ['app-build-manifest.json'],
});

const generateAppDirEntry = (entry) => {
  const packagePath = require.resolve('next-pwa');
  const packageDirectory = path.dirname(packagePath);
  const registerJs = path.join(packageDirectory, 'register.js');

  return entry().then((entries) => {
    // Register SW on App directory, solution: https://github.com/shadowwalker/next-pwa/pull/427
    if (entries['main-app'] && !entries['main-app'].includes(registerJs)) {
      if (Array.isArray(entries['main-app'])) {
        entries['main-app'].unshift(registerJs);
      } else if (typeof entries['main-app'] === 'string') {
        entries['main-app'] = [registerJs, entries['main-app']];
      }
    }
    return entries;
  });
};

/** @type {import('next').NextConfig} */
const nextConfig = {
	// ... 你的next.config配置项
	...
	webpack: (config) => {
    	const entry = generateAppDirEntry(config.entry);
   	 	config.entry = () => entry;
    	return config;
  	},
}

module.exports = withPWA(nextConfig);

以上配置 我让其在生产环境自动创建server worker和workbox等文件并在浏览器加载时初始化init sw文件,第二次访问时便可以创建sw缓存
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1789509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业数据安全管理容易忽视的关键点:云存储权限管控

云存储已经广泛应用于企业用户、教育领域、医疗领域以及政府和公共服务部门。具体应用场景包括文件共享、数据备份、在线课程、教学资源库、电子病历、医学影像、实验室数据、政务数据的集中管理和共享等。 云存储的优势非常明显: 可扩展性:云存储空间可…

NextJs 数据篇 - 数据获取 | 缓存 | Server Actions

NextJs 数据篇 - 数据获取 | 缓存 | Server Actions 前言一. 数据获取 fetch1.1 缓存 caching① 服务端组件使用fetch② 路由处理器 GET 请求使用fetch 1.2 重新验证 revalidating① 基于时间的重新验证② 按需重新验证revalidatePathrevalidateTag 1.3 缓存的退出方式 二. Ser…

【遂愿赠书 - 2期】:618火热来袭,网络安全书单推荐

文章目录 一、网络安全书单背景二、网络安全与编程实践书单2.1 🏰《内网渗透实战攻略》2.2 🛡️《Kali Linux高级渗透测试(原书第4版)》2.3 🎖️《CTF那些事儿》2.4 🚀《权限提升技术:攻防实战与…

MT2085 小码哥的福利

思路: 1. 耐受度从小到大排序,每一个甜品都找到第一个能忍受其甜度的手下。 例如样例:甜度为1的2份甜品给第1个人吃(此人耐受为2);甜度为3的9份甜品给第2个人吃(此人耐受为3)&…

学习串口屏需要了解哪些方面的知识

学习串口屏需要掌握的知识主要包括以下几个方面: 串口通信原理:串口屏是基于串口通信的显示控制模组,因此了解串口通信的基本原理和通信协议是必要的。你需要了解串口通信的基本概念、数据格式、波特率、校验位等参数,以及串口通…

python嵌套列表求学生平均分

嵌套列表 3个学生,5门课程,求每门课程的平均分和最大最小分 import randomnames [张三, 李四, 王五] courses [语文, 数学, 英语, 体育, 科学] # 嵌套列表,scores [[74, 96, 51, 83, 77], [81, 75, 75, 77, 52], [66, 57, 56, 74, 95]] s…

在iPad上恢复丢失数据的3方法

iPad概览 iPad不仅可以用来看电影,还可以用来工作和学习。使用 Apple Pencil,您可以在 iPad 上做笔记、画画、制作音乐、编辑视频和在课堂上教学等。同时,由于体积小,您可以在商务旅行中轻松随身携带。因此,iPad已成为…

Spring-IoC入门案例

黑马程序员SSM框架教程 文章目录 一、创建一个项目1.1 新建项目1.2 创建dao和service包,项目结构如下1.3 代码1.4 运行结果 二、将service和dao交给IoC容器管理2.1 导入Spring的坐标spring-context,对应版本是5.2.10.RELEASE2.2 2. 配置bean2.3 获取IoC容…

使用matplotlib.animation.ArtistAnimation绘制摆线

在数学中,摆线(Cycloid)被定义为,一个圆在一条直线上滚动时,圆边界上一定点所形成的轨迹。它是一般旋轮线的一种。摆线亦称圆滚线。 摆线也是最速降线问题和等时降落问题的解。 应用matplotlib.animation.ArtistAnimat…

BUG记录——代码正确,free报错

项目场景 无具体场景,学习数据结构时发现的问题。 问题描述 malloc后无法释放空间,报错显示如下。 图中代码如下。 int main() {int* a (int*)malloc(sizeof(int));free(a);return 0; } 原因分析 我使用的是VisualStdio2022版本,头文件的需求…

vscode设置编辑器文件自动保存

步骤 1.打开vscode的设置 2.在搜索栏输入关键字“保存”; 在 Files: Auto Save 设置项,选择自动保存的模式

echarts 交错柱状图, 对向柱状图, 双柱状图横向

设计图样式 上代码 父组件 <bar-chart :option"energyOption"></bar-chart>initChart() {//上周能耗排行榜this.black_label ["漫张农污处理设施","邓庄农污处理设施","王桥农污处理设施","甲庄农污处理设施"…

充电宝如何选购?2024年全网充电宝选购大全!选充电宝注意这几点

在2024年的数字生活浪潮中&#xff0c;充电宝虽小&#xff0c;却是维系我们设备活力的关键。但市面上产品良莠不齐&#xff0c;安全问题频发&#xff0c;如何从中筛选出既安全又实用的充电宝&#xff0c;成为每位数码达人的必修课。别担心&#xff0c;这篇“充电宝如何选购&…

leetcode第867题:转置矩阵

matrix[i][j]需要放在转置矩阵的(j,i)位置 public class Solution {public int[][] Transpose(int[][] matrix) {int rows matrix.Length; int columns matrix[0].Length; int[][] array2 new int[columns][];// 初始化内部数组&#xff08;列数&#xff09;for (int i 0…

判断经纬度是否在某个城市内

一、从高德获取指定城市边界经纬度信息 通过apifox操作&#xff1a; 二、引入第三方jar包&#xff1a; maven地址&#xff1a;https://mvnrepository.com/ maven依赖&#xff1a; <dependency><groupId>org.locationtech.jts</groupId><artifactId>…

私域流量课程企业培训小程序网站的作用是什么

中高型企业在发展方面&#xff0c;各个环节都需俱到&#xff0c;内部培训或是外部相关课程需求度都比较高&#xff0c;比如近些年火热的私域流量运营&#xff0c;存在着不少干货输出机构或个人&#xff0c;线上线下课程培训&#xff0c;做企业培训和私域流量运营课程输出的机构…

深入分析 Android Service (完)

文章目录 深入分析 Android Service (完)1. Service 的生命周期管理2. Service 的生命周期方法2.1 onCreate()2.2 onStartCommand(Intent intent, int flags, int startId)2.3 onBind(Intent intent)2.4 onUnbind(Intent intent)2.5 onRebind(Intent intent)2.6 onDestroy() 3.…

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题 *解决方法一&#xff1a; 将抽屉弹窗里从后端返回得到的值缓存在浏览器中&#xff0c;在当前页面中从浏览器中获取该值。 &#xff08;原理其实就是借助第三个盒子来传递一下值&#xff0c;太小学…

钣金件设计规范

(一&#xff09; 钣金 1、钣金的概念 钣金&#xff08;sheet metal&#xff09;是针对金属薄板&#xff08;厚度通常在6mm以下&#xff09;的 一种综合冷加工工艺&#xff0c;包括冲裁、折弯、拉深、成形、锻压、铆合等&#xff0c; 其显著的特征是同一零件厚度一致。 2、钣…