引言

Cesium实验室QQ群里有人在问Cesium的打包问题。我想干脆总结一下Cesium的打包命令特点,写篇文章,顺带庆祝一下1024程序员节。。

Cesium的npm脚本有好多,其中几个和打包相关的命令我用红框圈了出来,以下来一一解释。

 
输入图片说明

大部分的命令都是以gulp开头,可以看出Cesium是使用gulp进行打包的。在webpack早已成趋势的今天,Cesium的做法算是比较古老了。打包的细节可以在根目录下的gulpfile.js文件中查找到。以下npm命令的实现代码截图也都是出自gulpfile.js文件。

之前我经常把打包命令称为编译命令,结果被同学给怼了。。后来查了一下js方面的术语,虽然网上也有些文章称为编译,但是大多还是叫打包。可能是我之前C++用多了的后遗症吧。。很抱歉之前给各位同学造成了迷惑。。所以我也更正一下之前的称呼。。统一叫打包。。

 
image.png

打包命令详述

npm start

这个命令是启动Cesium自己写的一个http服务,虽然不是打包命令,但是比较典型,这里简单介绍一下。

执行这个命令以后,就可以启动服务了,端口号强制为8080。这个时候可以在浏览器中输入localhost:8080,效果如下:

 
输入图片说明

注意点1: 如果这个端口号被占用,那么对不起,服务起不来。没有webpack那么机智,不会自动替换一个端口号。

所以有时候,如果真的不想停止现有的8080端口服务。可以手动换个端口号运行,执行下面的命令:

node server.js --port 8081

注意点2: 另外还有一个值得注意的问题,Cesium的npm start命令启动的服务, 只能在本机查看 ,如果想在局域网内其他机器上观看,是不行的。如何解决这个问题呢?可以运行以下命令来搞定:

npm run startPublic

注意,必须要加上 run ,否则还是跑不起来的。

npm run build

Cesium的npm run build命令,和其他一些开源库,真的是有点儿差别。大部分项目执行这个命令的意思,一般都是打包生成一个dist文件夹,并且把编译压缩优化(生产环境下)的js放进去。但是Cesium却是在Source目录下生成了一个Cesium.js文件,注意您没看错,是 Source 文件夹下。当然也偷偷做了点别的事情,暂且不表。。

 
输入图片说明

重要的事情再说一遍:Source文件夹下的这个Cesium.js文件,默认情况下是没有的,并不是源码文件,是运行npm run build命令构建出来的js文件。

奇怪了,Cesium打包的结果,为什么要放在Source文件夹下?

其实这里的Cesium.js文件并不是真正意义上对外输出(生产环境下)的js文件,仅仅是把Cesium源码中一千两百多个js文件做了一下引用。。所以这个Cesium.js也就相当于一个索引。这样外界使用时,只要引用这么一个Cesium.js文件,就会通过AMD模式自动引入其他Cesium的源码js文件来使用。

这是Cesium打包时的一个比较特殊的地方,Cesium通过这种方式,就可以在网页中直接调试源码了。很遗憾,Cesium并没有使用目前比较流行的SourceMap的方式。

那么既然npm run build命令并不会进行打包,那么真正的打包命令是什么呢?这里就要说到npm run minifyRelease命令了。

npm run minifyRelease

这个命令会把Source目录下所有的js文件打包放到Build/Cesium/目录下,并且生成一个真正的供生产环境下来使用的Cesium.js文件。因为执行了各种编译压缩打包等操作,所以编译速度比较慢,在我的机器上,大概需要2分钟才能编译完。。

 
输入图片说明

我们再来分析一下这个命令的操作,如下图所示:

 
输入图片说明

outputDirectory选项中可以看到,Cesium把压缩优化后的Cesium.js文件放在了Build/Cesium/目录下。

optimizer选项则表示js代码如何压缩优化,Cesium使用的是uglify2。

removePragmas选项是用来删除源码中的调试信息的。我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示。这里面大多是调试信息,removePragmas设置为true,相当于来删除includeStartincludeEnd之间的js语句。

 
输入图片说明

npm run minify

npm run minify命令的配置如下图所示,可以看到他会压缩优化js代码,但是不会去掉调试信息。

 
输入图片说明

npm run combine

npm run combine命令则是既不压缩优化,也不去掉调试信息。相当于生成具备调试信息的js文件。

 
输入图片说明

npm run combineRelease

npm run combineRelease命令相当于不进行压缩优化,但是去掉了调试信息。

 
输入图片说明

npm run release

npm run release命令则相当于combine、minifyRelease、generateDocumentation三个命令的集合。他会同时做了三件事:

  1. 在Build/CesiumUnminified目录下生成调试版的Cesium.js文件;
  2. 在Build/Cesium目录下生成压缩优化好的(生产环境下)的Cesium.js文件;
  3. 并且还生成了Cesium的api文档,文档放在Build/Documentation目录下。
 
输入图片说明

打包遗留问题

看不到Development分组

很多同学会反馈Cesium的示例代码中有的时候看不到Development分组。

 
输入图片说明

这主要是因为npm run buildnpm run release命令都会生成Apps/Sandcastle/gallery/gallery-index.js文件,这个文件是用来管理Cesium的示例目录的。然而后者生成的gallery-index.js文件会去掉develop分组。所以实际情况是,执行了npm run release命令以后,Development分组就会消失。如果希望再次看到,方法也很简单,就是再次执行一下npm run build命令即可。

编译包和源码包的区别

Cesium官方在github中会同时提供两个版本的zip包,头一个是Cesium事先打包编译好的,这个zip包里面会有Build目录。在自己的项目中直接拿来引用Build/Cesium/Cesium.js就好。但是您在这个zip包里面是看不到Cesium示例中的development分组的,而且也不能执行npm run build进行编译(部分编译文件被移除)。

如果希望看到development分组示例,或者修改Cesium源码的话,就只能用第二个zip包了。这个zip包里面只有源码,需要自行打包。

 
输入图片说明

总结

  1. npm run build 只是生成了一个Source目录的Cesium.js文件,相当于一个索引;
  2. npm run minifyRelease 才是真正用来输出生产环境下的Cesium.js文件,输出目录在Build/Cesium/下;
  3. npm run release 同时输出调试版的Cesium.js、生产环境下的Cesium.js和api文档。

欢迎关注 Cesium实验室 ,QQ群号:595512567

 
image.png

Cesium打包命令总结的更多相关文章

  1. Cesium打包命令

    package.json中 (1) npm run build Source/Cesium.js 仅是把Cesium源码中一千两百多个js文件做了一下引用,并不会进行打包 所以这个Cesium.js也 ...

  2. 攻城狮在路上(叁)Linux(二十八)--- 打包命令:tar

    首先介绍一下tar打包命令的基本格式,下面的三种之间不能混淆. tar [-j|-z] [cv] [-f 新文件名] file1 file2 ...; tar [-j|-z] [tv] [-f 新文件 ...

  3. Linux tar打包命令

    Linux tar打包命令: 范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar [root@linux ~]# tar -cvf /tmp/etc.tar /etc < ...

  4. 转 vagrant package[打包命令]详解

    转 vagrant package[打包命令]详解   vagrant的一个非常重要的功能就是在你的同事之间分享你的box从而使大家的开发环境保持同步,打包[package]正是实现这一功能的关键所在 ...

  5. 第九章、文件与文件系统的压缩与打包 3. 打包命令: tar

    打包命令: tar gzip 与 bzip2 也能够针对目录来进行压缩, 不过,这两个命令对目录的压缩指的是『将目录内的所有文件 "分别" 进行压缩』! 将多个文件或目录包成一个大 ...

  6. 查看目标文件是否是以-fPIC编译的, ar 打包命令将多个静态库打包到一个里面

    readelf --relocs foo.o | egrep '(GOT|PLT|JU?MP_SLOT)' 上句大多数时候(和平台有关)可以正确判断是否是以fPIC选项编译的,如果输出为空,基本可以表 ...

  7. ant打包命令

    学习ant打包命令.发布到以上tomcat还未做集成部署,无法添加到jenkins中. http://blog.csdn.net/telnetor/article/details/7015935 ht ...

  8. iOS 应用打包命令一览

    文章转载自:http://www.jianshu.com/p/5d59966eaecc 文章排版部分根据自己的理解做了一些修改. 各种命令的简介 使用命令打包iOS 应用一般会用到 xcodebuli ...

  9. Linux打包命令 - tar

    上一篇文章谈到的命令大多仅能针对单一文件来进行压缩,虽然 gzip 与 bzip2 也能够针对目录来进行压缩, 不过,这两个命令对目录的压缩指的是『将目录内的所有文件 "分别" 进 ...

随机推荐

  1. (转)Wireshark "The NPF driver isn’t running…"(

    转:http://blog.sina.com.cn/s/blog_4bfd07180100e3ar.html 前几天重装系统,装上了windows7 RC系统.昨天开始尝试装上了wireshark 这 ...

  2. VS2010-MFC(常用控件:列表视图控件List Control 上)

    转自:http://www.jizhuomi.com/software/195.html      列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符串内容以列表的方 ...

  3. node.js在ubuntu上和windows上的安装

    Ubuntu 上安装 Node.js Node.js 源码安装 以下部分我们将介绍在Ubuntu Linux下安装 Node.js . 其他的Linux系统,如Centos等类似如下安装步骤. 在 G ...

  4. ASP.NET MVC Controller激活系统详解1

    一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ...

  5. Spring Cloud Config的配置中心使用非对称性加密

    首先,我们需要通过keytool工具来生成密钥对. keytool是JDK中的一个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认 ...

  6. CentOS中GDB提示Missing separate debuginfos解决办法

    安装debuginfo 修改文件 vi /etc/yum.repo.d/CentOS-Debuginfo.repo 修改enabled的值为1 使用debuginfo-install安装需要的文件

  7. 第二周课堂笔记2th

    ---恢复内容开始--- 1. 2.索引取单个值 取多个值叫切片, 切片:取多个值 从左到右取值: 原则:顾头不顾尾 1, a[0:3] abc 2, a[-5:-2] abc 3, a[0:-2] ...

  8. HTML中使用js的三种方式及优缺点介绍

    1.内部js: 在直接在页面的<script></script>标签内写js代码 优点:相对于使用行内js,内部js代码较为集中,与页面结构的实现代码耦合度较低,比较便于维护 ...

  9. java_打印流

    public class transientTest { /** * 反序列化操作2 * 序列化后的文件被修改后进行反序列化时会报错 * 决绝方法: * 手动添加序列号Serializable中有声明 ...

  10. Java开发系列-注解

    概述 在JDK5之后提供了一个新特性,和类.接口同级.定义时使用的关键字是@interface.注解主要有三个作用,分别是编译检查.替代配置文件.定义注解(元注解).分析代码(用到反射).注解的本质就 ...