首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果query/params包含点(.),则CRA的服务工作者不会介入

基础概念

在React应用中,Create React App(CRA)是一个常用的脚手架工具,用于快速搭建React项目。服务工作者(Service Worker)是一种在浏览器后台运行的脚本,可以拦截和处理网络请求,实现离线缓存、推送通知等功能。

问题描述

当URL的查询参数(query/params)中包含点(.)时,CRA的服务工作者不会介入处理。

原因

服务工作者的注册和激活依赖于特定的URL模式匹配。CRA默认的服务工作者配置可能无法正确处理包含点的查询参数。

解决方法

1. 修改服务工作者配置

可以通过修改CRA生成的项目中的src/serviceWorker.js文件来调整服务工作者的注册逻辑。以下是一个示例:

代码语言:txt
复制
// src/serviceWorker.js
const registerValidSW = async (location) => {
  try {
    const registration = await navigator.serviceWorker.register('/service-worker.js', {
      scope: '/',
      type: 'module',
    });
    console.log('Service worker registered:', registration);
  } catch (error) {
    console.error('Service worker registration failed:', error);
  }
};

// 修改注册逻辑,允许包含点的查询参数
const shouldRegisterServiceWorker = () => {
  const { pathname, search } = window.location;
  // 允许包含点的查询参数
  return true;
};

if ('serviceWorker' in navigator && shouldRegisterServiceWorker()) {
  window.addEventListener('load', () => {
    registerValidSW(window.location);
  });
}

2. 使用自定义服务工作者

如果默认的服务工作者配置无法满足需求,可以考虑使用自定义的服务工作者。可以在项目中创建一个新的服务工作者文件,并在src/index.js中进行注册。

代码语言:txt
复制
// src/custom-service-worker.js
self.addEventListener('install', (event) => {
  console.log('Custom service worker installing.');
});

self.addEventListener('activate', (event) => {
  console.log('Custom service worker activating.');
});

self.addEventListener('fetch', (event) => {
  console.log('Fetching:', event.request.url);
});

然后在src/index.js中注册这个自定义服务工作者:

代码语言:txt
复制
// src/index.js
import * as serviceWorkerRegistration from './custom-service-worker';

serviceWorkerRegistration.register();

应用场景

这种问题通常出现在需要对特定URL进行特殊处理的场景,例如:

  • 离线缓存特定类型的资源。
  • 对包含点的查询参数进行特殊处理。

参考链接

通过以上方法,可以解决CRA服务工作者不介入包含点的查询参数的问题,并根据具体需求进行相应的配置和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在2023年开启React项目

包含了许多特性(例如基于文件路由)。如果Next.js不是你菜,可以看看最近发布Remix[4]框架,它与Next.js不同之处在于它专注于web标准。...因此,一个性能优化营销页面可以在应用程序中实现,而实际应用程序隐藏在登录后。...如果你想在React基础上寻找一个有主见框架,并包含几种渲染技术(和基础设施),我会推荐使用Next,因为它是最成熟解决方案,有所有的优点和缺点。...如果Next.js不符合你需求,但你仍然在寻找一个包含所有特性SSR框架,请使用Remix。 如果你想拥有一个以内容为重点网站,请查看使用Astro小节。...在我个人看来,这是一个转折,它可能会推动Next成为所有之前列出案例一体化解决方案。

44850
  • 在线商城项目12-商品列表页价格筛选实现

    我们设定如下规则: 如果startPrice未传,默认查询起始价为0 如果endPrice未传,则不设置查询结尾价 查询起始价(不包含)到结尾价(包含)区间商品 修改routes/goods.js文件如下...: {$gt: startPrice}}; } // 查询起始价(不包含)到结尾价(包含)区间商品 let query = Good.find(params); query.sort...code: '900', msg: err.message || '服务器错误' }) } else {...所以验证代码运行结果每一步和每一方都很重要:自测,联调,测试介入。 另外,关于价格筛选设计规则,其实是不怎么合理。...如果有指定筛选空间,一般是定价没有小数点,比如:0-100,101-500,500以上这样。当然,具体筛选规则可以根据实际情况来定,这一块主要还是产品经理职责,开发可以提出建议。

    1.3K20

    在 React应用中实现Web推送通知

    文件中register()功能, 删除条件: process.env.NODE_ENV === 'production' 这样,不仅仅以prod模式加载服务工作者。...额外步骤:等等,生产模式如何? 在这种情况下,Create React App会编译build文件夹中文件,并在其中放置一个默认服务工作程序,其中包含对现代应用程序有用东西。...如果我们决定保留它们并只添加我们推送功能,则需要对构建过程进行一些修改。CRA中有用于服务人员构建工作箱。而且,即使您目的只是添加一些自定义代码,也没有内置方法可以对其进行修改。...如果您还没有准备好主动地投入到CRA上下文中Workbox配置研究中,我认为此软件包是最方便方法。...如果您想使用户烦恼很多次,请首先显示带有订阅要约自定义对话框。并且只有在用户同意情况下,才显示真实

    3.1K30

    【前端部署第五篇】使用 docker 部署单页应用,挂载 nginx 配置文件并对其进行系列优化

    解决方法也很简单:「在服务端将所有页面路由均指向 index.html,而单页应用再通过 history API 控制当前路由显示哪个页面。」...location / { # 如果资源不存在,回退到 index.html try_files $uri $uri/ /index.html; } 此时,可解决服务器端路由问题...那为什么带有 hash 资源可设置长期缓存呢: **资源内容发生变更,他将会生成全新 hash 值,即全新资源路径。**而旧有资源将不会进行访问。...root /usr/share/nginx/html; index index.html index.htm; location / { # 解决单页应用服务端路由问题...而前端关于部署自由度延长,体现在以下两个方面: 通过 Docker 对前端进行容器化,再也无需邮件通知运维上线步骤 通过 Docker 与 nginx 配置文件对前端进行 nginx 配置,一些细小琐碎但与项目强相关配置无需运维介入

    2K40

    【前端部署第七篇】将静态资源上传至 OSSCDN 并优化上传速度

    从而导致更多服务费用。 1. 静态资源上传优化 在前端构建过程中存在无处不在缓存 当源文件内容未发生更改时,将不会对 Module 重新使用 Loader 等进行重新编译。...这是利用了 webpack5 持久化缓存。 当源文件内容未发生更改时,构建生成资源 hash 将不会发生变更。此举有利于 HTTP Long Term Cache。...X-OSS-META-MTIME 或者 X-OSS-META-HASH 每次对比来判断该文件是否存在更改,本函数跳过 // 如果再严谨,将会继续对比 header 之类 async function.../build', objectName) // 如果路径名称不带有 hash 值,直接判断在 OSS 中不存在该文件名,需要重新上传 const exist = withHash ?...// 列举出来最新被使用到文件: 即当前目录 // 列举出来OSS上所有文件,遍历判断该文件是否在当前目录,如果不在,删除 async function main() { const files

    3.2K40

    【前端部署十一篇】通过 CICD 实践 Lint、Test、Performance 等前端质量保障工程

    本篇文章通过 github actions 介绍如何通过 CI 进行前端质量检查。 话不多说,先以一个流程简单 CI 配置开始,在 CI 中介入以下流程。 Install。依赖安装。 Lint。...但是 Lint 和 Test 都需要依赖安装 (Install),在依赖安装结束后再执行,此时就是串行。 「而进行串行时,如果前一个任务失败,下一个任务也无法继续。...即如果测试无法通过,则无法进行 Preview,更无法上线。」 PS: 此处可控制某些任务允许失败。如 Github Actions 中 jobs....将 Install 过程前置 「首先,将 Install 前置会节省服务器资源,但并不会加快 CI 时间。甚至因为多了一个 JOB,Job 间切换也需要花费时间,总时间还会略有增加。」...与 Git Hooks 不同 有些细心并知识面广泛同学可能注意到了,某些 CI 工作也可在 Git Hooks 完成,确实如此。 它们最大区别在于一个是客户端检查,一个是服务端检查。

    1.3K20

    一个简洁、强大、可扩展前端项目架构是什么样

    Bulletproof React是什么 Bulletproof React与我们常见脚手架(比如CRA)不同,后者作用是「根据模版创建一个新项目」。...而前者包含一个完整React全栈论坛项目: 用户登录页面 作者通过这个项目举例,展示了与「项目架构」相关13个方面的内容,比如: 文件目录该如何组织 工程化配置有什么推荐 写业务组件时该怎么规范...组件状态 对于组件局部状态,如果只有组件自身以及他子孙组件需要这部分状态,那么可以用useState或useReducer保存他们。...服务端缓存状态 对于从服务端请求而来,缓存在前端数据,虽然可以用上述处理「应用状态」工具解决,但「服务端缓存状态」相比于「应用状态」,还涉及到「缓存失效」、「序列化数据」等问题。...Final Form URL状态 URL状态包括: url params (/app/${dynamicParam}) query params (/app?

    1.1K30

    从国外到国内,为何大家都瞄准了磁导航介入手术?

    今年,由中科院支持项目Supiee研发成功,这代表着国内也有人踏上了这条赛道,欲与国外争锋。虽然国内磁导航介入手术系统在推广速度上比国外晚了一,但幸运是,后来者也有着自己独特优势。...所谓智能医疗,就是利用互联网、大数据、算法等技术介入医疗服务,从而创造出服务和新生态。...但同时,企业也要保护科研工作者产品思维,争取尽可能多科研时间和成本,医院有需求,就代表变现路径已经跑通,但真正服务才刚刚开始,在考虑变现方式同时,还要平衡产品质量和迭代速度。...也就是说,磁导航正处在一个即将爆发时期,其回报周期必然不会让人失望。 做好行业教育,达成行业认知是行业爆发第一步。原因在于,智能医疗行业处于市场早期,仍有一些医院对于引进智能硬件处于观望阶段。...做产业,如果没有巨人来牵引生态,一群散兵游勇无头苍蝇式乱窜,是不可能创造一个大产品市场

    1.1K30

    快将你 React 应用迁移到 Vite 吧,速度太快啦

    Webpack 会 bundle 整个代码,因此如果代码库非常大,超过 10k 行,您可能会看到开发服务启动速度较慢,并且需要很长时间才能看到所做更改。如下图所示: 如何变得更快?...Vite 通过将应用程序模块分为两类:依赖项和源代码来改进开发服务启动时间。 依赖项大多是纯 JavaScript,在开发过程中不会经常更改。...我已将现有的基于 CRA 应用程序迁移到 Vite。让我们比较一下差异。 CRA 开发服务器启动时间 VS Vite 开发服务器启动时间 CRA 用了 12 秒来启动开发服务器。...该示例应用程序仅包含 2 个路由和 6 个组件。让我们用 Vite 看看同样情况: Vite启动开发服务器只花了298ms,与CRA相比是非常快。你可以看到这两种工具之间巨大差异。...例如,如果您当前构建时间是 20 分钟,那么使用 Vite 时会缩短到 10 到 12 分钟。

    1.3K20

    vue 路由传参 paramsquery两种方式区别

    2、展示上 query更加类似于我们ajax中get传参,params类似于post,说再简单一,前者在浏览器地址栏中显示参数,后者则不显示 query:       image.png params...但是params会丢参params 和path不能共存 所以只能用name params传参 需要在 路由配置 path /:id 这样就不会丢参 最重要params刷新会消失。。。...query不会,params参数只要在路由中声明了就不会消失。 在路由声明了,跟query又有什么区别呢,干嘛不直接query呢,params不会出现在地址栏,更加美观。...如果提供了path,params将会被忽略(即如果要使用params传参,一定要使用name),但是query不属于这种情况。...如果使用完整路径和query传参,刷新页面时不会造成路由传参参数丢失。

    6.5K00

    前端知识总结vue篇(下)

    如果发现没有浏览器API,路由会自动强制进入这个模式。 Hash和history区别 HashURL会更改、浏览器可以前进和后退,但浏览器不会刷新并且不会服务端交流。...b.假设首页进入详情页,如果用户在首页每次点击都是相同,那么详情页就没必要重复请求,直接缓存起来。 如果点击不是同一个,直接请求。...如果结 构中还包含输入类dom,那么可能会产生错误DOM更新。 23. 路由传参Queryparams区别(参考blog.csdn.net/qq_43787947…) query语法: this....$route.query.name 3.两者中query在刷新页面的时候参数不会消失 但[params] (https://so.csdn.net/so/search?...q=params&spm=1001.2101.3001.7020) 在刷新页面的时候参数会消失 可以考虑本地存储解决此问题 4.query传过来参数会显示到地址栏中 而params传过来参数不会显示到地址栏中

    34820

    【前端部署第四篇】使用 Docker 构建缓存及多阶段构建优化单页应用

    单页应用静态资源 「所有的前端单页应用对于部署,最重要就是两:」 静态资源如何构建: 大部分项目都是 npm run build。...由于需要构建,需要 node 运行环境,因此选择 node。 将以上几个脚本命令放在 RUN 指令中。 启动服务命令放在 CMD 指令中。...「那 Docker 中是不也可以做到这一?」 在 Dockerfile 中,对于 ADD 指令来讲,如果「添加文件内容 checksum 没有发生变化,则可以利用构建缓存」。...yarn.lock 内容没有变化,则不会重新依赖安装 RUN yarn ADD ....构建体积优化: 多阶段构建 我们目标静态资源,完全不需要依赖于 node.js 环境进行服务化,而 node.js 环境将造成极大资源浪费。

    1.6K20

    2022 年 React 生态

    Next.js 可以支持你生成静态站点,而 Gatsby.js 也支持了服务端渲染。不过就我个人使用体验而言,我会觉得 Next.js 更好用一。...建议: 优先使用 Vite 创建 React 客户端应用 CRA 备选 优先使用 Next.js 创建 React 服务端渲染应用 最新技术:Remix 仅创建静态站点备选 Gatsby.js 可选学习经验...但是,如果你在没有框架情况下使用 React 并且仅用于客户端渲染(例如 CRA),那么现在最强大和流行路由库是 React Router。...这样,它就不会意外泄露到其他 React 组件样式中。你应用某些部分仍然可以共享样式,但其他部分不必访问它。...最后一提示:如果你想在 React 中有条件地应用一个 className,可以使用像 clsx 这样工具。

    5.8K20

    使用Edge turbo下载CNCB数据

    该数据库有自主开发下载软件Edge turbo客户端主要包含两部分:linux 命令行工具和 edgeturbo service。...命令行工具为用户提供了简洁命令行语法,用户可以快速上手以体验传输服务。...Linux操作,不会使用上面的vi命令,也可以全路径使用这个软件,不添加环境变量哈) source ~/.bashrc 运行 如果已经配置了PATH变量可以直接输入以下命令 edgeturbo start.../gsa/CRA007099/CRR511439/CRR511439_f1.fq.gz 下载数据会保存在家目录下download目录下 PS: 我在自己服务器测试了一下, 貌似速度也一般般哦...大家也可以复制粘贴上面的命令去试试看: 如果想要更换下载目录可以使用这个命令。 [Llocal_path]参数用于指定本地下载目录,如果不指定,使用当前配置下载目录。

    2.7K20

    React为什么不将Vite作为默认推荐?

    在当时,他很好解决了两个痛: 0配置初始化项目 这点不用过多介绍,执行如下命令后就能生成一个CSR(客户端渲染)React项目: npx create-react-app 项目名 集成工具链 CRA...除了以上两,随着CRA走红,React团队还将他作为新特性快速分发渠道,比如: Fast Refresh(针对React热更新,不会丢失组件状态) Hooks推出后一系列lint规则 依托CRA...试想,如果没有CRA推动,Hookslint规则很难在开发者中有这么高普及率,Hooks理念也就不会这么快席卷整个前端框架领域。 从以上三来看,Vite完全可以成为比CRA性能更优替代品。...如果Child依赖data来请求自己数据,那么由于App请求滞后导致Child请求也滞后了,这就是请求瀑布问题。...如果是用Vite取代webpack作为CRA打包工具,未来可能会。但是,这不是最首要问题。 如何协助上层框架更好服务开发者,才是React团队首要考虑问题。

    1.3K10

    以太坊DAO攻击解决方案代码解析

    •❷ 如果节点未设置分叉,则不校验。•❸ 确保只需在 DAO 分叉10个区块上校验。•❹ 如果节点允许分叉,则要求区块头 Extra 必须符合要求。...•❺ 当然,如果节点不允许分叉,也不能在区块头中加入非分叉链 Extra 特殊信息。 这种 config.DAOForkBlock 开关,类似于互联网公司产品新功能灰度上线功能开关。...根据不同情况分别处理: 1.有返回区块头: 如果返回区块头不一致,校验不通过,等待倒计时结束。如果区块头一致,根据前面提到校验分叉区块方式检查。校验失败,此直接断开连接,说明已经属于不同分叉。...但我自己已经到达分叉高度,考虑对方TD是否高于我分叉块。如果是,包容,暂时认为属于同一网络。否则,校验失败。...硬分叉目的是,以人为介入方式拦截攻击者资产。一旦到达分叉立即激活资产转移操作。

    1.2K40

    Python 爬虫库 urllib 使用详解,真的是总结太到位了!!

    query#fragment 对象中包含了六个元素,分别为:协议(scheme)、域名(netloc)、路径(path)、路径参数(params)、查询参数(query)、片段(fragment)。...a=6#comment urlsplit() urlsplit()函数也能对 URL进行拆分,所不同是,urlsplit()并不会把 路径参数(params) 从 路径(path) 中分离出来。...如果此形参不存在或不适用于指定useragent 或者此形参robots.txt条目存在语法错误,返回None。...如果此形参不存在或不适用于指定useragent或者此形参robots.txt条目存在语法错误,返回None。...site_maps() - 以list()形式从robots.txt返回Sitemap形参内容。如果此形参不存在或者此形参robots.txt条目存在语法错误,返回None。

    1.8K30
    领券