如何基于create-react-app2与workbox开发pwa应用?

栏目: 服务器 · 发布时间: 6年前

内容简介:上一篇下面进入正题,先来说一下项目,这次的项目和上一篇基于vue的项目是同一个项目,可以说是用react的重构,用途是用来浏览学校心理学院部分实验信息,因为楼主用vue较多,所以这个项目也是react的练手项目,为了多实践,项目中还用到了react-redux去进行状态管理(项目引入redux的目的只是为了实践),react-router进行路由控制。看一下效果:
如何基于create-react-app2与workbox开发pwa应用?

上一篇 “记录一次基于vue、typescript、pwa的项目由开发到部署” ,发布后,忙于秋招的楼主我,终于有时间来写这篇文章。最近秋招也挺顺利,拿到了网易广州岗的offer,对目前想留在广州发展的我来说真是太合适不过了。在最近的反思中,楼主我也意识到了自己存在过于急功近利的毛病,前端是一个更新迭代很快的行业,最忌讳的就是浮躁的心态,所以楼主决定要好好调整自己,要有工匠精神和延时满足的意识。以后的文章也要好好调整,尽可能的写细写好。

下面进入正题, 本篇文章介绍 如何基于目前的create-react-app(目前的项目cra版本为2.0.3)利用workbox开发一款pwa,并将其发布到自己的服务器。

为什么要做这个项目?

  1. 因为pwa已经是家喻户晓的概念了
  2. create-react-app2 提供了对pwa的支持
  3. cra2发布后,基于cra2开发pwa的文章较少
  4. 对react技术栈实践练手
  5. 搞事情

先来说一下项目,这次的项目和上一篇基于vue的项目是同一个项目,可以说是用react的重构,用途是用来浏览学校心理学院部分实验信息,因为楼主用vue较多,所以这个项目也是react的练手项目,为了多实践,项目中还用到了react-redux去进行状态管理(项目引入redux的目的只是为了实践),react-router进行路由控制。看一下效果:

如何基于create-react-app2与workbox开发pwa应用?

可以看到,我们从手机桌面的一级入口,在断网的条件下,依旧丝滑的打开了app,而且带有过渡动画,并正常的访问了实验数据,这就是pwa,拥有原生app般的体验,又拥有web的轻便。下面我们来看看,如何基于create-react-app2与workbox如何实现这个项目。

cra2 给我们带来了什么pwa特性?

note:部分链接需要梯子

我们的项目是基于 create-react-app 2 ,cra2提供了对pwa的支持,可以让我们可选的将我们的app 升级为 pwa。 关于cra2添加的新特性,可以在这里看 what's new about cra2 ,看一下目前cra2到底提供了什么关于pwa的支持。首先我们利用cra2生成一个项目,:

npx create-react-app my-app
复制代码

可以看到在src文件目录下有一个serviceWorker.js文件,这个文件看起来很复杂,其实就是检查一下环境变量是否为“production”,且当前浏览器是否兼容service worker。 再来看一下我们的 index.js 文件,可以看到最后面有一句:

serviceWorker.unregister();
复制代码

如果我们想要使用cra2提供的pwa特性的话,我们需要将 serviceWorker.unregister() 改为 serviceWorker.register(),然后我们打包我们的项目,在打包得到的build文件夹下我们可以看到生成了一个server-worker.js文件 和 preche-manifest.xxxxxxxxx.js 和一个manifest.json。

其中的server-worker.js中规定了我们如何缓存我们的资源,preche-manifest 中列出了我们的静态资源 利用上一篇关于vue-cli 和pwa 中提到的web server工具 web-server-for-chrome

如何基于create-react-app2与workbox开发pwa应用?

为我们打包得到的build文件夹下的代码建一个服务并访问。 然后打开chrome控制台的Application查看,发现它帮助我们缓存了我们的静态文件。

如何基于create-react-app2与workbox开发pwa应用?

我们把网断开,可以发现,我们的app依旧能正常打开。这就是目前的cra2(2.0.3)给我们提供的默认的pwa特性。默认的为我们生成一个service-worker.js缓存我们的app shell,使得它可以在离线时正常的打开。

限制性

这足够了吗?很明显是不够的。在实际情况中,除了缓存我们的app shell,我们往往需要动态的对我们的路由和请求的数据进行缓存,这本来是一件很正常的事情,也就是说,我们需要去定制自己的servive worker去实现自己想要的功能。

但是在目前的cra2中,并没有提供这么一个方式让我们去定制自己的service-worker,除非你eject我们的项目,将所以的配置文件暴露出来,但是eject是一个不可逆的过程,将我们的配置文件暴露出来也是一个不优雅的做法。所以我们需要另开途径来实现我们的需求。

为什么 create-react-app 没提供定制service worker 的方法?

其实并不是cra2不提供相应的定制方法,目前cra2 也在准备实现相应的功能,我们可以看一下下面几个issue或request。

  1. Custom ServiceWorker config #2237 开发者huygn提出在create-react-app支持pwa后是否能够让开发者自定义相关配置
如何基于create-react-app2与workbox开发pwa应用?

但是react.js的工作人员gaearon回应短期内没有此打算,未来或许会实现该想法,并关闭了此issue。

如何基于create-react-app2与workbox开发pwa应用?
  1. Import scripts in Service Worker #2714 开发者piotr-cz提出了一个方案,给create-react-app提了一个request,为当时create-react-app所使用的SWPrecacheWebpackPlugin插件提供一个importScripts选项,可以让我们在项目的public目录下定制自己的service worker
如何基于create-react-app2与workbox开发pwa应用?

但是最终还是被create-react-app的合作作者Timer关闭了这个request,因为有开发者提出了更合理的实现方式

如何基于create-react-app2与workbox开发pwa应用?
  1. Workbox service worker #4169 开发者davejm 提出了更合理的方案,并且被采纳。davejm 提议将w-precache-webpack-plugin换成Workbox webpack plugin,并提供对应的配置文件。
如何基于create-react-app2与workbox开发pwa应用?

从这些资料中可以看到, 在将来 ,我们或许就可以像在vue-cli3.0中一样定制自己service worker了,配置的方式便是在根目录下建立 cra.config.js文件,然后写入类似下面的配置代码:

module.exports = {
  workbox: {
    method: 'inject',
    config: {
      swSrc: 'src/my-custom-service-worker.js'
    }
  }
}
复制代码

这里不得不感叹一下react社区的力量。

现在怎么办?

既然目前还没有提供定制service worker的方法,那么我们应该怎么做呢?关于如何实现这个app:

  1. 在现阶段基于create-react-app的项目中,如何利用workbox自定义自己的service worker。
  2. 如何编写service worker文件以缓存我们的静态文件和请求的数据
  3. 如何部署我们的项目到自己的服务器上,享受pwa的快感

楼主打算在下一篇文章中给大家介绍,因为楼主发现与其长篇大论把所有内容都放在同一篇文章,不如分开几篇细细的讲要有效果。

项目体验:

如何基于create-react-app2与workbox开发pwa应用?

项目地址: browseExpByReact

如果感兴趣,可以对比着基于vue的实现来看: browseExpByVue


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

增长黑客

增长黑客

Sean Ellis / 张溪梦 / 中信出版集团股份有限公司 / 2017-11-1 / CNY 59.00

脸谱网如何从默默无闻到坐拥二十几亿用户? 爱彼迎、优步何以在短短时间估值超过百亿美元? 领英怎样跨步成为全球领先的职业社交平台? 这些初创公司实现爆发式成长的共同奥秘就是增长黑客。 增长黑客是硅谷当下热门的新商业方法论,其精髓在于通过快节奏测试和迭代,以极低甚至零成本获取并留存用户。 作为最早提出“增长黑客”概念的理论先驱、带领Dropbox实现500%增长的实战领军......一起来看看 《增长黑客》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器