Cesium项目源码结构及部署
一、 背景前述
因为Cesium在国内的三维开发占据很大一部分,很多公司使用开源版本进行开发,有修改源码和创建分支需求,在跟随主版本升级的同时有需要维护一套自己的版本。
二、 项目的文件路径介绍
路径 |
说明 |
Apps |
调试页面 |
Build |
打包存放目录 |
Documentation |
API文档 |
launches |
Eclipse外部工具环境构建配置,直接为服务器运行node |
Source |
功能源码 |
Specs |
单元测试集 |
ThirdParty |
第三方插件 |
Tools |
打包、代码检查、jsdoc工具 |
CHANGES.md |
版本的变更记录以及每个版本修复了哪些功能 |
gulpfile.cjs |
打包配置,包括GLSL语法的转义、压缩和未压缩库文件的打包、API文档的生成以及自动化单元测试等 |
index.html |
Web导航首页 |
package.json |
描述这个NPM包的所有相关信息,包括作者、简介、包依赖、构建等信息,格式是严格的JSON格式 |
README.md |
项目的入门手册,介绍整个项目的使用、功能 |
server.cjs |
Cesium内置的Node服务器文件,命令npm run start以及npm run startPublic实际上执行的文件。 |
web.config |
Web应用程序的配置信息 |
三、 基础模块介绍
路径 |
说明 |
Source/Assets |
一些纹理,图片的静态资源 |
Source/Core |
基础核心类,事件、颜色、矩阵、几何对象等等 |
Source/DataSources |
数据源,包括数据对象、数据集,数据集合等等,geojson,czml |
Source/Renderer |
渲染类,调度纹理,shader,缓冲区、顶点属性等等 |
Source/Scene |
场景类,相机、模型加载器,地球、大气、相机、图层等等 |
Source/Shaders |
静态Shader文件,shader模板 |
Source/ThirdParty |
第三放插件,workers,knockout等等 |
Source/Widgets |
Cesium的UI控件,时间轴、信息框、地图选择器等等 |
Source/Workers |
工作线程,主要用于几何体的创建define定义(Web Workers可以在JS中支持多线程开发) |
Source/WorkersES6 |
ES6工作线程import导入 |
四、 Cesium模块结构
模块化的两种手段:1、ES6特性,模块化—export/import对模块进行导出导入的;2、AMD-异步模块定义—定义模块
模块结构参考API文档理解http://www.zgeo.work/cesiumTx/Documentation/index.html
模块化的优势:避免命名冲突(减少命名空间污染);更好的分离,按需加载;高复用性;高可维护性
五、 关于版本
1、 Cesium-version.zip 生成包
2、 Source code.zip 源码包
六、 推荐学习
1、 WebGL2 理论基础https://webgl2fundamentals.org/
2、 OpenGL 教程https://learnopengl-cn.github.io/
3、 Unreal Engine教程https://www.unrealengine.com/zh-CN/onlinelearning-courses
4、 Rollup中文文档 https://www.rollupjs.com/
5、 gulpjs自动化构建工具https://www.gulpjs.com.cn/
七、 项目内网部署
为什么?外网访问慢不稳定,开发包下载更慢,不能及时获取版本,另外有部分内网开发需求。
1、 自动化流程部署:
Jenkins+gitlab/github+定时/SCM构建+Docker镜像部署(nginx)
GitLab CI/CD+Docker镜像部署(nginx)
2、 自动化软件介绍:
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。
功能 |
JENKINS |
GITLAB CI/CD |
开源 / 商业性 |
开源 |
开源 |
产品类型 |
自托管 / 本地部署 |
自托管 / 本地部署 |
内置 CI/ CD |
Jenkins 根据需求支持 CI/CD |
我们不需要为了 CI/CD 而安装任何东西,这是一个内置功能 |
独特功能 |
插件 |
自动化 DevOps/ 允许持续集成和代码管理在同一个地方进行。 |
支持 / SLA |
没有官方支持或 SLA |
Yes |
安装配置 |
简单 |
简单 |
自托管选项 |
开源软件和自托管是使用它的唯一方法 |
Yes |
构建 Pipelines |
通过 Jenkins Pipeline DSL 自定义 pipeline |
Yes |
应用程序性能监控 |
没有提供用于分析性能的功能 |
展示所有部署的应用程序的性能指标 |
生态系统 |
1000 个社区插件 |
Yes |
全面的 API |
提供了全面的 API 功能 |
提供了在软件项目中进行深层集成的 API |
特定语言支持:JavaScript |
Yes |
Yes |
集成 |
允许与其它工具集成(例如:Slack、GitHub) |
很多第三方集成都可以访问,最著名的是 GitHub 和 Kubernetes。 |
CI/ CD 部署面板 |
部分支持项目中的 CI 和 CD 功能 |
可以根据项目中的 pipeline 历史和最近状态为每一个用户更改一个单独的面板 |
API |
Yes |
Yes, 提供了一个 REST API & 一个(新的)GraphQL API |
代码质量 |
通过 Sonarqube 插件以及其它可以用来验证代码质量的不同插件来提供代码质量检查。 |
GitLab 也提供了一个功能来仔细检查代码的质量。 |