32 mars3d 官方 demo 可以跑起来, 但是自己拷贝的 demo 跑不起来

前言

这个问题是 同事碰到的一个问题 

主要的影响因素在于 官方的 demo 从 mars3d-cesium 中暴露了一部分文件作为 http 服务, 然后 我们自己的 case 里面没有这部分服务, 然后 导致 js 访问不到 

以及 大部分的 css, js, img 等等 静态资源 访问不到 


 

Cesium is not defined 的问题定位 

项目启动之后 console 报错如下

fcc3e0dec65e42faba71b301bfc00a85.png

 

首先是比较一下 demo 代码的调整

主要是比较 HelloWorld.vue 和 map.vue 和 vue.config.js 和 package.json

比较结果为, HelloWorld.vue 和 map.vue 无明显的感动, 仅仅是 codestyle 的差异

vue.config.js 仅仅是注释掉了 devServer 的配置  

package.json 仅仅是注释掉了一些元数据信息

14212af663e7451caa15c7dad1248f13.png

 

 

重新安装依赖

这种 not defined 另外一种可能是 安装的依赖存在问题, 因此 删除 node_modules 之后重新 npm install

然后 重新启动项目, 发现问题 依然存在

 

 

确定报错的位置

因为从 报错的堆栈信息中, 我们无法确认具体 是因为什么报错

因此 我们来进行一个简单的排除法 来定位是哪里 引起的 mars3d 的库函数的报错

注释 mars3d 的相关依赖, 以及使用的地方, 直到 页面可以正常使用

a3dd2554be354123a6561a17830c2d62.png

 

正常页面如下

104b3521ed034520b9a573c83b0e6451.png

 

然后发现 只要是有 “import * as mars3d from "mars3d";”相关 页面就会报错

47d96895fb5d42e0981923db62ac8508.png

 

 

根据 mars3d 检索所有的 .vue, .js 判断问题

.vue 中如下, 可以看到 仅仅是 HelloWorld.vue 和 map.vue 这两个业务模块中有使用

其他的诸如 App.vue 等等 vue 的基础代码中没有 mars3d 的使用

因此 我们可以不管 .vue

8f0cceee24004a5aa4db27a8af2c43f8.png

 

再来看一下 .js

可以看到, 只有 vue.config.js 中有 mars3d 的关键字, 然后 我们来查看一下 详细的代码

977e2f01a61c48258df191547569d4a5.png

 

这块代码如下, 先只看注释 else 排除使用 mars3d-cesium

然后 我们这里缺少的就是 Cesium

然后 对比正常的 demo 项目 mars3d-vue2

e9b0239ac2e64188bb46aa523d614cc2.png

 

 

然后搜索一下 “VUE_APP_MARS3D_SOURCE”, 可以看到 mars3d-vue2 中是有 “VUE_APP_MARS3D_SOURCE=module” 的配置的

然后将 .env 拷贝到 mars3d_test, 之后 重启项目

VUE_APP_MARS3D_SOURCE 的作用可以参考这块的 README.md

ca6cb1e8d9414e03a6e1f39d5049eba2.png

 

更新 .env 增加环境变量如下, 然后 启动项目

2410e4818b5e4464a30bd42bb71391ac.png

 

可以发现是 大部分功能是正常了, 但是 貌似还存在一些小问题

可能是 样式问题 或者 js加载异常导致的样式问题

8c3e9ad8e9ff4fa38b0ae713f09dfeb9.png

 

 

根据 VUE_APP_MARS3D_SOURCE 的备注探讨其他的解决方式

其实产生 这个问题的原因是在 README.md 的 第三章节

三种导入 mars3d-cesium 库的方式, 第一种就是 mars3d-vue2 的方式, 只是我们这里 未加环境变量为 ”--dev” 的配置

第二种是直接通过 css,js 导入, 直接在 public/index.html 下面添加 css, js 的依赖

第三种是基于当前 项目提供 css, js 的服务

556278995a464d6b8e33d379e663da06.png

 

 

在 public/index.html 中直接导入 css/js

5b97a905c1f64224ac946dcdd50528ce.png

 

然后 效果如下, 可以看到 也没有上面的 样式错乱问题了

00bc9334ccea4a44822233895ab64dbe.png

 

 

下载官方 sdk 放在 public 下面由本项目提供这部分的 js/css/img 的服务

调整如下, 拷贝相关资源, 更新 index.html 

更新 VUE_APP_MARS3D_SOURCE 为 local 

fbcf629599bf45ddb542e8741e6c9135.png

 

然后启动项目情况如下 

d259fff5c4de4e37818522b3fae0b329.png

 

 

存在的样式问题的调试排查

上面问题解决了之后, 我这边还会出现一个样式问题如下

4c444870cd6f479ab0ec364a39654958.png

 

这个问题的排查方式如下, 一般要么就是 js, 要么就是 css 的问题

找一个存在问题的元素, 来查看 相关 listener, style, 比如我这里 是以左下角的一个 ”帮助切换按钮” 为例

 

 

js 这块的差异

先来看 js 这块, 正常的情况下 js 的回调如下

acdecc488f8f47069b441cb1ab9b3036.png

 

然后 我们再来看一下 异常的情况, 然后 确认一下 click 的回调是否一致

可以看到的事 二者的是一样的, 然后 我们再来 查看 css 这边

eb32feedd595403bb8b55cb1a2ce47cb.png

 

 

css 这块的差异

然后再来看 正常的这一边的 css

7cfcfaa04fb84a5d9ff2bb39a8d48582.png

 

异常的情况下的 css

可以看到 相比于正常情况是 缺少一部分 css 的, 然后 我们来项目中搜索一下 这部分的 css

b4fe77f73d5a4165ba6756418351b13a.png

 

 

以 “.cesium-navigation-button-right” 为例, 可以找到如下, 前者是该 vue组件 的 css, 后者是 build 生成的 css, 我们应该使用的是后者

8870deac028e467dbbc2b73052366c28.png

 

这个 css 是在这里处理的, 可能因为 某些原因 编译, 没有吧这个 css 编译进去

cc7b2d79baf24b018c7763e08feffb01.png

 

具体的原因 我们先不探究, 先解决问题, 我们的 map.vue 会引用 “/Users/jerry/WebstormProjects/mars3d_test/node_modules/mars3d/dist/mars3d.css”

我们先将目标 css 复制进去, 然后 重新启动项目 看一下 效果

19179daf70214b6da6057b007a6a7f19.png

 

 

现在 页面正常了

14e8ea7796e04066806a74739ae4b4a3.png

 

 

完 

 

 

 

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

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

相关文章

11.创建后台系统项目

后台系统项目 兼容性 vite官网:https://vitejs.dev/ vite中文网:https://cn.vitejs.dev/ vite需要node.js版本 >14.0.0,建议16 node -v 查看版本号 创建项目 进入存放目录 执行命令 npm create vitelatest 选择vue框架 选择typescript…

苍穹外卖笔记

苍穹外卖 DAY01nginx反向代理MD5加密yapi进行接口导入Swagger介绍 DAY02新增员工需求分析和设计写相关代码测试(1. 后端文档测试 2. 前后端联调代码完善 员工分页查询DAY01 02涉及到的知识 DAY01 nginx反向代理 MD5加密 拓展:spring security jwt 提供了更强大灵…

登录校验:JWT令牌、Filter、Interceptor

JWT: 全称:JSON Web Token 定义了一种简洁的、自包含的格式,用于在通信双方以json数据格式安全的传输信息,由于数字签名的存在,这些信息是可靠的。 组成: Header(头部):(“alg&q…

银行5G短消息应用架构设计

(一)RCS简介 1.1 RCS的提出与标准制定 RCS(Rich Communication Services & Suite,富媒体通信)是GSMA(Groupe Speciale Mobile Association,全球移动通信系统协会)在2008年提出的一种通讯方式,RCS融合了语音、消息…

springboot3+jdk17+MP整合最新版jersey详细案例,正真做到拿来即用

如题,springboot3.x java17 MP 整合最新jersey,各种请求类型(实战/详解) 文件上传下载 jersey资源注册 拦截器(JWT) 跨域处理 全局异常 Valid注解校验 等等 ,除非你必须整合security&am…

SpringCloud Alibaba Nacos简单应用(二)

😀前言 本篇博文是关于SpringCloud Alibaba Nacos简单应用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的…

【spring】@Lazy注解学习

Lazy介绍 Lazy 注解是一个配置注解,用于指示 Spring 容器在创建 bean 时采用延迟初始化的策略。这意味着,除非 bean 被实际使用,否则不会被创建和初始化。 在 Spring 框架中,默认情况下,所有的单例 bean 在容器启动时…

【Linux】模拟实现shell(bash)

目录 常见的与shell互动场景 实现代码 全部代码 homepath()接口 const char *getUsername()接口 const char *getHostname()接口 const char *getCwd()接口 int getUserCommand(char *command, int num)接口 void commandSplit(char *in, char *out[])接口 int execut…

aurora仿真使用等

IP设置 代码 aurora_8b10b aurora_8b10b_inst (/**********************************************************************************///axi_stream tx.s_axi_tx_tdata(s_axi_tx_tdata), // input wire [0 : 31] s_axi_tx_tdata.s_axi_tx_tkeep(s_axi_tx_…

2024开年首展,加速科技展台“热辣滚烫”

3月20日,备受瞩目的半导体行业盛会SEMICON China 2024在上海新国际博览中心盛大启幕,展会汇集了来自全球的半导体领域顶尖企业与专业人士。加速科技作为业界领先的半导体测试设备供应商携重磅测试设备及解决方案精彩亮相,展示了最新的半导体测…

KIMI爆了!对比文心一言和通义千问它到底有多强?

原文:赵侠客 前言 最近国产大模型KIMI爆了大部分人应该都知道了,从我个人的感受来看这次KIMI爆了我不是从技术领域接触到的,而是从各种金融领域接触到的。目前国内大模型可以说是百模大战,前几年新能源大战,今年资本割完韭菜后留…

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统,运行内存都2G 1.prometheus监控服务器:192.168.6.1 主机名:pm 2.grafana展示服务器:192.168.6.2 主机名:gr 3.被监控服务器:192.168.6.3 …

codeTop102:二叉树的层序遍历

前言 在已知BFS的方式后,知道每次从队列中取一个节点,就要将这个节点的所有子节点按照顺序放入队列。 难点在于怎么确定将同一层的节点放在一个数组里面的输出,也就是输出一个二维数组? 解决方法: 每次while循环将队列上轮放入的…

Vue2(十):全局事件总线、消息订阅与发布、TodoList的编辑功能、$nextTick、动画

一、全局事件总线!! 任意组件间通信 比如a想收到别的组件的数据,那么就在a里面给x绑定一个demo自定义事件,所以a里面就得有一个回调函数吧,然后我要是想让d组件给a穿数据,那就让d去触发x的自定义事件&…

洛谷_P2678 [NOIP2015 提高组] 跳石头_python写法

P2678 [NOIP2015 提高组] 跳石头 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) d, n, m map(int,input().split())data [0] for i in range(n):value int(input())data.append(value) data.append(d)def check(mid):now 0cnt 0for i in range(1,n2):if abs(data[now]-da…

机器学习(27)

文章目录 文献阅读1. 题目2. abstract3. 网络架构3.1 Theoretical Results 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 数据集4.3.2 参数设置 4.4 结论 三、实现GAN1. 任务要求2. 实验结果3.实验代码3.1数据准备3.2 模型构建3.3 展示函数3.4 训练过程 小结本周内…

从0写一个问卷调查APP的第13天-1

1.今日任务 我也只是一个大学生,有什么思路不对的地方给我指出来哟! 分析:上次我们实现了任务调查的插入。但是我们插入的问卷调查只有它的标题,也就是这个问卷调查是什么我们告诉数据库了,但是现在我们还没有给它添加任何问题&…

蓝桥杯真题:幸运数字

这道题可以用 integer.string()求每个进制的数,但这里要每一位数相加,所以用这个方法会比较麻烦,如下 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scan new Sc…

华为OD机试真题-推荐多样性-2024年OD统一考试(C卷)

题目描述: 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 1. 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推 2. 每个列表的元素尽量均…

spring注解驱动系列--AOP探究二

上篇中记录了AnnotationAwareAspectJAutoProxyCreator的创建以及注册,主要是 1、EnableAspectJAutoProxy 注解会开启AOP功能 2、然后这个注解会往容器中注册一个AnnotationAwareAspectJAutoProxyCreator组件。 3、之后在容器创建过程中,注册后置处理器&a…