混合开发中h5前端离线打包规范流程

news2024/9/20 18:42:22

1、离线化的目的
首先在H5+Native的混合开发实战中,让人头疼最多的恐怕就是网页加载过程中的白屏了,以及弱网、断网状态下h5页面无法正常加载的问题,那么为了解决这些问题,我们H5端跟原生端共同讨论采用Hybrid App离线加载方案,因此web前端采用offline-package-webpack-plugin插件生成离线包,提供给安卓原生端进行下载。
2、离线化的适用范围
适用于所有需要支持离线化加载的web前端技术开发人员(h5嵌入app,并且需要离线加载的所有应用)。
3、简介
3.1、离线机制的介绍
借用网上的一个离线化图
在这里插入图片描述
3.2 与原生对接机制介绍
在这里插入图片描述
3.3 前端对接运维与客户端流程图
在这里插入图片描述
离线包主要是使用一个可以将h5项目打包成zip压缩包的webpack插件生成。
这个插件就是offline-package-webpack-plugin,它是一个在前端打包的过程中同时生成离线包的插件,打包完后最后会将每个资源(可通过文件类型限定遍历范围)的信息记录在一个资源映射的json里,但是这里我们公司的需求为了跟cocos统一,不做zip压缩,只生成json文件跟资源,剩余交由运维统一处理。

4.原理
我们的需求是希望前端打包的过程中同时生成离线包,而webpack插件就是基于在emit钩子时(生成资源并输出到目录之前),通过compilation对象(代表了一次单一的版本和构建资源)遍历读取webpack打包生成的资源,最后将文件类型的信息记录在json里,具体内容如下:
在这里插入图片描述
其中remoteUrl是该资源在静态资源服务器的地址,path则是在客户端本地的相对路径(通过拦截该资源端对应的服务端请求,并根据相对路径从本地命中相关资源并返回)。
最后运维那边会把我们打包后的输出文件,统一做zip压缩处理(zip压缩),如没有特殊需求可我们前端h5可以直接做zip压缩。
5、插件安装
5.1插件安装指南

npm install offline-package-webpack-plugin -D 
//或
yarn add offline-package-webpack-plugin -D
//或
pnpm install offline-package-webpack-plugin -D

5.2不同项目接入方式
5.2.1 html+jquery项目(webpack)
使用插件的前提是我们的html项目已经配置了webpack打包环境,没有的话我们就先自行配置,这样我们自然必须创建一个webpack.config.js文件,然后我们统一将离线包配置加到webpack.config.js文件中,配置如下:

const OfflinePackagePlugin = require("offline-package-webpack-plugin")
plugins: [
  new OfflinePackagePlugin({
       version:1,   //版本号
       indexFileName:“index.json”,//此项映射json名称
       packageName:“离线资源”,//资源包名称
       moduleCode:1001,//模块编码
       createZip:false,    //由于要与cocos保持统一因此我们也不用直接生成压缩包,而是交给运维那边生成压缩包。
       baseUrl:“https://xxx.xxx.com/,//基础路径
      updateLogs:”这里填写更新内容”, //本次版本更新日志内容
      fileTypes:[“js”,“css”,“png”,“html”,“gif”,“jpg”] //fileTypes次选项可控制是否通过文件扩展名将资源添加到zip文件中,空数组即为无可扩展文件名限制
   })
]

5.2.2 vue(vue-cli2/vue-cli3/vue-cli4)基于webpack构建
在vue项目中我们一般都会在vue.config.js中进行一些插件配置,配置如下:

const OfflinePackagePlugin = require("offline-package-webpack-plugin")
configureWebpack:(config)=>{
          config.plugins.push({
             new OfflinePackagePlugin({
                     version:1,   //版本号
                     indexFileName:“index.json”,//此项映射json名称
                     packageName:“离线资源”,//资源包名称
                     moduleCode:1001,//模块编码
                    createZip:false,    //由于要与cocos保持统一因此我们也不用直接生成压缩包,而是交给运维那边生成压缩包。
                    baseUrl:“https://xxx.xxx.com/,//基础路径
                  updateLogs:”这里填写更新内容”, //本次版本更新日志内容
                    fileTypes:[“js”,“css”,“png”,“html”,“gif”,“jpg”] //fileTypes次选项可控制是否通过文件扩展名将资源添加到zip文件中,空数组即为无可扩展文件名限制
      })
   })
}

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

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

相关文章

fiddler(抓包)的用法和HTTP 协议的基本格式

目录 fiddler(抓包)用法: HTTP 协议的基本格式 HTTP请求: 首行 认识HTTP方法 GET和POST的典型区别: 认识请求“报头”(header) HTTP 响应 HTTP状态码: 状态码的分类: 认识响应 …

SD-WAN基本介绍

一、SD-WAN是什么?它能为我们带来什么? SD-WAN,即软件定义广域网络,是将SDN技术应用到广域网场景中所形成的一种服务。这种服务用于连接广阔地理范围的企业网络、数据中心、互联网应用及云服务,旨在帮助用户降低广域网…

STL——array和vector容器

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程&…

解密HTTP协议:探索其组成部分与工作原理

前言 欢迎来到今天的每日一题,每日一提。昨天有聊到,HTTP 和 HTTPS 之间有什么区别?面试官基本秉承着刨根问题的原则,肯定是不会轻易放过我们的,那么自然是要继续拷问了。所以我们今天就聊聊什么是 HTTP,它…

微服务分布式搜索引擎 Elastic Search RestClient 操作文档

文章目录⛄引言一、初始化 Java RestClient二、RestClient 对文档的CRUD操作⛅新增文档⏰查询文档⚡修改文档⌚删除文档三、RestClient 批量文档导入⛵小结⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能…

SpringBoot整合XXL-JOB

XXL-JOB: 官网文档地址:分布式任务调度平台XXL-JOB GitHub地址:https://github.com/xuxueli/xxl-job Gitee地址:https://gitee.com/xuxueli0323/xxl-job 拉取代码,首先执行一下doc/db下的sql文件 tables_xxl_job.sq…

JAVA识别电子发票问题汇总

之前写的java解析电子发票,上线后出现了一下线上的问题,无法解析发票,对问题做个规整,仅供参考! 1. Pdfbox介绍 pdfbox是一款Apache的开源工具,可以进行对pdf进行操作,如题,转图片…

UE4C++学习篇(十九)-- 动画蒙太奇初级使用

用一个第三人称的射击案例来简单介绍一下动画蒙太奇的使用,动画蒙太奇的具体介绍这里就不多说了,不知道的小伙伴可以去搜一下了解。 这里介绍角色射击,射击的时候播放一个射击动画。 选中需要创建出动画蒙太奇的动画,点击创建&am…

物理服务器通过U盘安装CentOS 7操作系统

一、制作U盘启动盘 1、使用UltraISO工具打开需要安装的操作系统iso镜像文件(我安装的是CentOS-7-x86_64-Minimal-2009.iso),如下图所示 镜像下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2、将该系统镜像…

nginx--官方模块

目录 1.概述 2.Nginx的客户端状态 1.使用 2.目录中选择一个随机主页 3.http内容替换 ​编辑 4.nginx请求限制 5.nginx访问控制 1.基于Ip的访问控制 1.1使用 1.2access_mod.conf 1.3只允许自己ip访问 1.4http_x_forwarded_for 1.5http_access_module局限性 2.基于…

【用python将文件夹下面的文件夹里面的文件全部提取出来,并且放到一个新的文件夹】

文件里面有多个文件,每个文件下面有很多jpg格式的照片,把所有照片提取出来并且放在一个新的文件夹下面。 可以使用Python的os和shutil库来完成这个任务。 比如说:我的faces95文件夹下面有95个文件,每个文件下面有十七到十八个照片…

深拷贝和浅拷贝

目录 一.Java的Cloneable和clone()方法 1.Object类中的clone() 2.实现Cloneable接口的类 3.通过clone()生成对象的特点 二.深拷贝和浅拷贝 1.浅拷贝 2.深拷贝 3.实现深拷贝的两种方法 1.一种是递归的进行拷贝 2.Json字符串的方式进行深拷贝 一.Java的Cloneable和clone…

No.037<软考>《(高项)备考大全》【第21章】项目组合管理

【第21章】项目组合管理1 考试相关2 项目组合管理2.1 项目组合管理、项目集管理、项目管理异同2.2 项目组合管理过程组3 练习题参考答案1 考试相关 选择1分必考 案例概率低,知识点看一遍即可 2 项目组合管理 1、项目组合是将项目、项目集,以及其他方面…

2023年MathorCup数学建模赛题浅析

MathorCup俗称妈杯,是除了美赛国赛外参赛人数首屈一指的比赛,而我们的妈杯今天也如期开赛。今年的妈杯难度,至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…

Servlet、SpringMVC、SpringBoot整合Thymeleaf汇总

介绍 模板引擎,与JSP、JSTL类似。 好处是:直接写在HTML文件中,服务器可以解析,浏览器也可以解析,实现了动静分离,并未破坏html结构,即使无网络、不通过后端渲染也能在浏览器成功打开&#xff…

kettle——数据清洗(数据表-->文本文件)

实验步骤: 1.数据表(图片加分析,创建表的过程和对应的字段及记录) ①选择数据库 ②创建表结构 ③插入数据 2.kettle连接模块(图片加分析,每个模块实现的功能) ①新建“转换”文件,”文件”——>“新建…

JAVA开发运维(Jenkins中踩的坑)

最近尝试通过Jenkins来自动化部署项目,没想到还踩了很多坑。Jenkins部署的基本原理: 通过Jenkins服务器拉取gitlab上的代码进行打包,推送到目标服务器上,并运行启动脚本。 那么Jenkins就要解决三个问题。 1.连接上目标服务器 …

电子行业应如何实施数字工厂管理系统

随着信息技术的快速发展,电子制造企业也正在逐步做好数字化转型,而数字工厂管理系统便是数字化管理中的一个重要系统。数字工厂系统可以帮助电子企业实现生产过程的自动化、智能化和可视化,提高生产效率,降低生产成本,…

2023香港国际创科展开幕,欧科云链受邀参展

4月12日,由香港特区政府、香港贸易发展局主办的首届香港国际创科展(InnoEX)在香港会展中心开幕,欧科云链(01499.HK)作为全球领先的Web3科技企业受邀参展。香港国际创科展现场图 此次创科展上,欧科云链向公众…

【RocketMQ】负载均衡源码分析

RocketMQ在集群模式下,同一个消费组内,一个消息队列同一时间只能分配给组内的某一个消费者,也就是一条消息只能被组内的一个消费者进行消费,为了合理的对消息队列进行分配,于是就有了负载均衡。 接下来以集群模式下的消…