Workbox是一组库和Node模块,可轻松缓存资产并充分利用用于构建Progressive Web Apps的功能。

1.安装

1.直接cdn引入

   importScripts ('https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js' );//谷歌文档

从cdn引入workbox就可以使用workbox。

2.通过npm安装

import {precaching} from 'workbox-precaching';import {registerRoute} from 'workbox-routing';import {BackgroundSyncPlugin} from 'workbox-background-sync';

可以借助打包工具webpack或者rollup

2.预缓存文件

网址项目里很多资源是可以长期储存的,比如像字体,样式等。

import {precacheAndRoute} from 'workbox-precaching';precacheAndRoute([  {url: '/index.html', revision: '383676' },  {url: '/styles/app.0c9a31.css', revision: null},  {url: '/scripts/app.0d5770.js', revision: null},]);

如果手动去配置这些东西是很繁琐的,版本很难管理,而且需要一个个去填写。

workbox支持利用cli构建它。

npm install workbox-cli -gworbox wizard 可以生成配置文件workbox generateSW workbox-config.js 可以配置文件生成对于的js文件执行完命令可以看到已经自动生成了代码,当有静态文件需要变化的时候再运行一次更新代码就可以了。也可以使用  --injectManifest 在已有的sw里插入代码import {precacheAndRoute} from 'workbox-precaching';precacheAndRoute(self.__WB_MANIFEST);上述代码会被替换掉

或者直接用gulp/node去构建

npm install workbox-build --save-dev 安装//等到内容插入 src/sw.jsimport {precacheAndRoute} from 'workbox-precaching';precacheAndRoute(self.__WB_MANIFEST);//config.jsconst workboxBuild = require('workbox-build');//在bulid后面生成const buildSW = () => {  //返回一个promise  return workboxBuild.injectManifest({    swSrc: 'src/sw.js',    swDest: 'build/sw.js',    globDirectory: 'build',    globPatterns: [      '**/*.{js,css,html,png}',    ]  }).then(({count, size, warnings}) => {    //打印错误    warnings.forEach(console.warn);    console.log(`${count} files will be precached, totaling ${size} bytes.`);  });}buildSW();

3.workbox配置

使用各种Workbox API时,您会注意到一些缓存是自动创建的。

每个缓存名称由三部分信息组成:--

我们可以设置缓存的名字

import {setCacheNameDetails} from 'workbox-core';setCacheNameDetails({  prefix: 'my-app',  suffix: 'v1'});//根据策略的缓存可以自定义名称import {registerRoute} from 'workbox-routing';import {CacheFirst} from 'workbox-strategies';registerRoute(  ***  new CacheFirst({    cacheName: '***',  }));

debuig

//当通过workbox-sw引入workbox(全局变量)//开发环境workbox.setConfig({ debug: true });// 生产环境workbox.setConfig({ debug: false });//默认 本地测试localhost debug是开启的 而在https下 是自动关闭的//另外用node构建的话 debug是跟着node变化的//webpackconst webpack = require("webpack");module.exports = {  plugins: [    new webpack.DefinePlugin({      'process.env.NODE_ENV': JSON.stringify('production'),    }),  ],//rollupimport replace from 'rollup-plugin-replace';export default {  plugins: [    replace({      'process.env.NODE_ENV': JSON.stringify('production'),    }),  ],  }

往期回顾:

给你代码:关于npm的坑

扩展的上传与更新|给你代码

你是否像我一样排斥Composer?|给你代码

1 代码_给你代码:Workbox介绍(1)相关推荐

  1. c++hello world代码_在 Rust 代码中编写 Python 是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师译者 | Arvin 责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews) 以下为译文: 大约一年前,我发布了一 ...

  2. c++hello world代码_在Rust代码中编写Python是种怎样的体验?

    作者 | Mara Bos,Rust资深工程师译者 | Arvin,编辑 | 屠敏来源 | CSDN(ID:CSDNnews)大约一年前,我发布了一个名为inline-python(https://c ...

  3. 手游方舟怎么输入代码_方舟自定义代码怎么输入 | 手游网游页游攻略大全

    发布时间:2016-02-16 我的世界手机版代码输入方法 代码怎么用.我的世界手机版代码怎么输入?我的世界手机版代码怎么用?很多玩家对此不是很清楚,下面小编为大家介绍一下我的世界手机版代码怎么用,希 ...

  4. 读代码读的什么代码_您的代码应读得像书

    读代码读的什么代码 There's a pandemic among programmers. Long functions, broad and nondescriptive names for f ...

  5. java计分系统编程代码_使用Java代码对实时系统进行编程

    由于许多重要原因,Java语言在实时系统中的使用并不广泛. 这些包括Java语言设计固有的不确定性性能影响,例如动态类加载,以及Java Runtime Environment(JRE)本身,例如垃圾 ...

  6. 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...

    两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 情况二 代码已经push到运程仓库,想把代码还原到上一次提交,此 ...

  7. 收藏本站html,加入收藏代码_加入收藏代码 -收藏本站的代码

    摘要 腾兴网为您分享:加入收藏代码 -收藏本站的代码,追书神器,智慧医疗,云端学习,央视影音等软件知识,以及workflow,电脑管家2017,自动考勤表,双录系统,国泰君安富易,佳缘佳信,谷歌浏览器 ...

  8. 同步代码和异步代码_告别异步代码

    同步代码和异步代码 Quasar是一个将真正的轻量级线程(纤维)添加到JVM的库. 它们非常便宜且非常快-实际上,光纤的行为就像Erlang进程或Go goroutines-并允许您编写简单的阻塞代码 ...

  9. python灰色模型代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    机器之心报道 机器之心编辑部 PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代 ...

  10. python低代码_几行代码搞定ML模型,低代码机器学习Python库正式开源

    PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型,提升机器学习实验的效率. 想提高机器学习实验的效率,把更多精力放在解决业务问题而不是写代码上?低代码平台或许是个不错的 ...

最新文章

  1. jupyter 写入csv pandas_Pandas 最详细教程在这里
  2. 不讲码德!坏味道偷袭我这个老码农
  3. Selenium2(WebDriver)开发环境搭建(java版)
  4. Python的oop概述
  5. erlang精要(2)-数制
  6. matlab仿真图片png,Simulink仿真入门到精通(六) Simulink模型保存为图片
  7. vsftpd给root设置访问权限
  8. LeetCode 1601. 最多可达成的换楼请求数目(回溯+剪枝)
  9. C++数据的一些注意事项
  10. zuul 自定义策略_如何为您的社区定义指标策略
  11. 安卓学习笔记37:利用OpenGL ES绘制平面图形
  12. U盘被写保护的解决办法
  13. MVVM MVC MVP
  14. Open3d之对点云进行DBSCAN 聚类
  15. respberry pi VNC 连接设置
  16. HTML - 'MARQUEE'
  17. [JNI] 开发基础(7)结构体
  18. java输出日志_Java日志打印方法
  19. python- 机器人抓取谷歌地图数据
  20. 【Unity】 HTFramework框架(十)Resource资源管理器

热门文章

  1. 西湖大学鞠峰组招聘“污水处理”与“微生物组”方向博士后与科研助理
  2. 科学通报:合成微生物群落的构建与应用
  3. R最快且比dplyr最高效的大数据处理R包:tidyfst
  4. pandas使用sort_values函数将dataframe按照指定数据列的内容对dataframe的数据行进行排序(sort dataframe rows by a specific column
  5. Seaborn使用violinplot函数可视化多分组小提琴图(violin plot)、每个小提琴图内部包含两个分组、使用inner函数设置在小提琴图中使用虚线显示分位数位置
  6. R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置、str_locate_all函数定位所有位置
  7. R语言可视化包ggplot2改变图例(legend)标签实战
  8. ModuleNotFoundError: No module named ‘cx_Oracle‘
  9. python使用imbalanced-learn的EditedNearestNeighbours方法进行下采样处理数据不平衡问题
  10. 可视化LassoCV的最佳alpha值