本篇文档基于 LayaAir IDE 2.0正式版,2.0正式版将于本周末官网更新提供开放下载,敬请开发者关注。
LayaAir IDE的项目发布是开发者常用的功能,集成了项目混淆与压缩以及版本管理等产品发布功能。尤其是在微信、百度等小游戏平台推出以来,IDE中的项目发布也成为了适配各个小游戏平台的必备功能。
LayaAir IDE在项目发布的功能上一直在不断的优化,中间历经多个大小版本的升级迭代。自LayaAirIDE 2.0正式版开始,又迎来了一次重大的版本升级,重构并推出了全新的项目发布3.0版本,如图1-1,不仅加强了发布流程的自定义,让发布筛选更加灵活,也为一键发布成为小游戏项目提升了更为便利的用户体验。
(图1-1)点击小飞机图标打开3.0发布面板
下面为大家针对各项功能逐一的详细介绍:
发布平台中有目前有四种选择选项,分别为web/Native、微信小游戏平台、QQ轻游戏、百度小游戏。如图1-2所示。
(图1-2)
选择不同的平台类型,会在发布的时候适配不同的平台。
web/Native
是指发布为HTML5版本,运行于浏览器环境或者是LayaNative的APP环境中。
微信小游戏
是指发布为已适配微信小游戏的项目,发布后的项目可以运行于微信开发者工具内(关于微信小游戏可阅读相关的文档)。
QQ轻游戏
是指发布为手机QQ的轻游戏项目(曾称为玩一玩),运行于手机QQ的轻游戏平台中。
百度小游戏
是指发布为已适配百度小游戏的项目,发布后的项目可以运行于百度开发者工具内(关于百度小游戏可阅读相关的文档)。
混淆压缩与版本管理是发布时比较常用的功能。但如何更灵活的管理和控制哪些目录和文件是要压缩,或者哪些是要启动版本管理的,哪些是不需要的。LayaAirIDE也是进行了多次的优化和改版,自发布3.0开始,在发布功能中内置了node-glob模块,可以让目录与文件的匹配工作变的更加灵活。
LayaAirIDE的发布功能默认集成了常用的排除与包含功能,也允许开发者自定义文件筛选匹配规则。下面将结合发布3.0面板中的功能进行逐个说明介绍。
当勾选是否压缩JSON、是否压缩图片、是否压缩JS文件等功能选项后,将会启动这些对应的压缩功能。色块区域内显示了默认的文件筛选匹配规则,如果要修改默认的文件匹配规则,可以点击色块区域。如图2-1所示。
(图2-1)
点击色块内的区域后,可以进入区块对应的规则编辑界面,比如我们点击是否压缩图片的色块区域,会打开压缩图片的规则编辑界面,如图2-2所示。
(图2-2)
文件夹
文件夹默认是bin目录,可以指定压缩范围到其子目录或更低一级的目录,但是不允许跳出bin目录。
后缀列表
不同压缩类型点击进入后的后缀列表默认值也有所不同,比如压缩JSON的默认值是json,压缩图片的默认值是png,jpg。压缩JS文件的默认值是js。
虽然后缀列表中允许更改或者新增,但是由于每个分类调用的处理机制是有区别的,开发者不要随便增加不相干的后缀,否则可能会引起报错。比如,压缩JSON里的后缀规则,即使新增了其它的后缀名,但是文件还是要json格式的。又比如js后缀,压缩的同时还会检测语法并进行混淆。这与json格式的压缩机制也是不同的。压缩图片的功能就更不用说了,同理。
排除这些文件
该选项是基于后缀列表筛选的辅助筛选功能 ,当勾选了该功能选项后,则不是压缩当前匹配的文件,而是排除当前匹配的文件。这个机制通常用于多个匹配规则结合起来。比如,我们默认要压缩bin目录下的全部png和jpg的文件。但是我想把bin目录下的res目录忽略掉不压缩。那么,我们可以点击是否压缩图片右侧的加号,新建一个排除规则,如图2-3所示。
(图2-3)
增加了这个排除规则后,点击确定,结合后的匹配规则如图2-4所示。
(图2-4)
包含子文件夹
该选项也是基于后缀列表筛选的辅助筛选功能 。不勾选则仅限于匹配文件夹
选项中设置的当前目录文件,勾选后则会在匹配的规则中会包含其下的所有子文件夹目录。
筛选器结果
筛选器结果栏中不仅会显示当前设置的筛选功能,还可以直接在该栏中编辑更为复杂的筛选条件,需要注意的是直接编辑筛选条件后,要先点击确定
进行保存,否则当设置了其它筛选参数后,会把这里的设置自动替换掉。
至于筛选器内的规则是类似正则表达式的glob匹配规则,在解析路径模型的时候, 大括号里用多个逗号隔开的内容会被展开, 里面的部分也可以包含"/" ,比如 a{/b/c, bcd} 会被展开成 a/b/c 和 abcd ,这里简单介绍一下常用的匹配符规则:
匹配符 | 说明 |
---|---|
* | 匹配文件路径中的0个或多个字符,但不会匹配路径分隔符,除非路径分隔符出现在末尾 |
** | 匹配路径中的0个或多个目录及其子目录,需要单独出现,即它左右不能有其他东西了。如果出现在末尾,也能匹配文件。 |
? | 匹配文件路径中的一个字符(不会匹配路径分隔符) |
[...] | 匹配方括号中出现的字符中的任意一个,当方括号中第一个字符为^或!时,则表示不匹配方括号中出现的其他字符中的任意一个。注意不能组合,只能是其中一个字符。比如,[xyz].js 只能匹配 x.js,y.js,z.js,不会匹配xy.js,xyz.js等, |
!(pattern|pattern|pattern) | 匹配任何与括号中给定的任一模式都不匹配的 |
?(pattern|pattern|pattern) | 匹配括号中给定的任一模式0次或1次,类似于js正则中的(pattern|pattern|pattern)? |
+(pattern|pattern|pattern) | 匹配括号中给定的任一模式至少1次,类似于js正则中的(pattern|pattern|pattern)+ |
*(pattern|pattern|pattern) | 匹配括号中给定的任一模式0次或多次,类似于js正则中的(pattern|pattern|pattern)* |
@(pattern|pattern|pattern) | 匹配括号中给定的任一模式1次,类似于js正则中的(pattern|pattern|pattern) |
开发者如果想了解更多的glob编写规则,可以在百度等搜索引擎中查找node-glob相关的文档。这里就不详细介绍了。
说明
说明栏中可以填写一些规则的备忘信息,用于针对该规则的提示,避免长期不用之后遗忘了该规则的作用。例如图2-3中,写清了这个规则是用于“排除bin\res目录内的图片压缩”。
启用压缩功能,会导致发布时间变慢,要压缩的文件越多,消耗的压缩时间越长,如果不是最终上线或者是必要的测试。上线调试阶段尽量不要勾选,尤其是JS压缩后,会混淆代码,让代码可读性变的很差,影响调试。
关于版本管理,最开始是采用链接后加随机数的方式来管理,但是微信等环境下,缓存问题很严重,随机数方式并不能有效解决缓存问题,还是会出现因更新版本导致页面混乱等现象出现。因此,LayaAirIDE在发布的时候增加了一种从根本上解决缓存问题的方案,那就是直接改名文件名,文件名都不一样了,缓存问题自然就不存在了。
当开发者启用版本管理之后,发布时将会自动生成带hash字符串的文件名,同时生成一个version.json的文件名映射文件。通过版本管理类ResourceVersion自动关联代码中的实际文件名和重命名后的版本管理控制的文件。开发者启用版本管理的文件只要发生改变,就会在发布时自动更新改变文件名中的hash字符串,这于运行环境而言,这相当于调用了新的文件,自然就不会存在缓存引起的问题。
而开发者在开发的过程中,无需关注版本管理最终生成的文件名是什么。甚至,由于LayaAirIDE 2.0在创建项目的时候,已经自动在代码里集成了版本管理类ResourceVersion,开发者连怎么去使用ResourceVersion类都无须关注,只需要在打算启用版本管理时,在项目发布界面,勾选是否启用版本管理的选项即可。
在项目发布界面,勾选是否启用版本管理后,筛选规则与压缩是一样的,都是采用的glob规则来控制哪些文件参与版本管理和哪些文件不参与版本管理。默认html页面不参与管理,这个开发者不要去掉,因为html更改后很容易出现问题。其它文件如果开发者有特定需求,可以自行控制。
需要注意的是,如果是发布微信小游戏等特定的小游戏渠道,这些小游戏自身的项目文件和默认指定文件名的文件是自动给忽略处理,不会加入版本管理,比如game.js和game.json等。
(图3)
如图3所示的效果,左边是开发环境下的bin目录,右边是启用版本管理后的发布目录,我们可以看到game.js与game.json这些小游戏项目必须存在的文件被自动忽略了,而js目录下的js文件与res目录下的png图片文件名,都被加入了hash字符串。
微信、百度等小游戏的平台比较火热。但因为这些平台都存在本地包的概念,并且对包体有限制,所以提取本地包的功能以及易用性就显的非常重要,目前的版本也是历经多次优化后的最友好版本,优化了以前种种的不便,完全可以满足开发者一键发布为小游戏项目本地包的需求。具体的本地包相关的介绍和文档直接查看对应的文档,这里重点介绍一下如何提取。
点击选择文件
右则的输入框会弹出如图4这样的bin目录结构树。开发者勾选本地包中要使用的代码或者资源。点击确定后,会自动保存已选择的目录和文件,以便于发布工具筛选和复制提取指定的本地包内容。
(图4)
默认不选的时候,本地包目录会在release目录下创建一个wxgame_pack目录,用于存放本地包的内容。当然,开发者也可以随意指定一个目录,用于存放小游戏项目的本地包内容。
具体操作为:点击图5 目标目录
右侧的输入框选定对应的目录即可。
(图5)
小游戏的提取文件就选择文件
和目标目录
这两个核心功能,别看操作简单,却是非常实用的功能。
最早的版本不能提取本地包,全包复制的提取比较麻烦。又或者复制时如果遗漏了小游戏项目文件,那还需要再手工复制。这些问题在这个版本统统得到了解决,不仅本地包目录可以自定义筛选。选择对应的小游戏平台后,该平台对应的项目文件即使不勾选到本地包文件列表,也会自动提取过去,保障小游戏项目的完整性。
(图6)
微信和百度等小游戏开放域项目默认的入口文件和主域的入口文件并不一样,所以勾选是否为微信/百度开放数据域项目
后,会自动将入口的问题处理好,不用开发者每次在发布后,手工处理。极大的增加了开发者的小游戏发布易用性。
Tips:对于不支持开放域的平台,会在选择不同平台后,自动屏蔽了功能的勾选。
如果开发者担心因为遗忘了编译,导致发布的代码并非最近代码的话,可以勾选是否重新编译项目
,勾选后会在每次发布时先编译项目再执行发布流程。可以避免因遗忘编译导致的项目发布后报错。
由于最终发布的时候,通常还是不可避免要对图片,js,json等进行压缩,如果项目越大,那发布编译的时间也越长,这个很难避免,尤其是JS压缩还需要分析语法并进行混淆。
之前有不少不太理解的开发者反馈发布时间过长,这个时间的长短取决于勾选的压缩内容及项目大小,所以只能建议开发者在不是最终发布的时候,调试阶段不要进行混淆和压缩。
本次3.0版本优化的时候,考虑到开发者的需求,除了让开发者自由选择控制可压缩的文件,还增加了发布编译过程的实时打印显示。让开发者能大概了解到当前所处的产品编译发布进度,减少处于未知状态时的急迫情绪。
LayaAir引擎官方比较重视开发者的体验反馈,并持续不断的进行着优化。
(图7)
对于一些存在制作自动打包工具需求的开发者,项目发布3.0还提供了layaair2-cmd
命令行发布方式。开发者可以使用layaair2-cmd
在不打开IDE的情况下对layaair 2.0项目进行压缩、版本管理、引擎适配等编译发布等操作。可以避免多个项目之间发布时的繁琐切换流程。
npm install layaair2-cmd -g
如果有npm安装都不会用的开发者请面壁并跳过命令行发布文档,老老实实的用LayaAirIDE的界面发布。
我们通过输入 layaair2-cmd -h
回车后 可以查看到layaair2-cmd的帮助信息,
回车后输出内容如下:
Usage: layaair2-cmd [command] [args]
Options:
-v, --version output the version number
-h, --help output usage information
Commands:
compile compile project.
publish publish project.
help [cmd] display help for [cmd]
帮助中首先给出了命令的使用范例:
Usage: layaair2-cmd [command] [args]
说明:layaair2-cmd 后面先是 具体对应命令,然后是该命令的参数。
Options:
-v, --version output the version number
-h, --help output usage information
说明:不输入命令的时候 -h
打印输出的是刚刚看到的layaair2-cmd帮助说明。-v
打印输出的是layaair2-cmd版本号。当然,如果输入具体命令,那 -h 和 -v 就是对应命令的帮助说明和版本号了。
Commands:
compile compile project.
publish publish project.
help [cmd] display help for [cmd]
说明:那layaair2-cmd都支持哪些命令呢,-h的帮助说明里也直接给出了三个命令,compile、publish、help。
compile
是项目编译命令,该命令会生成编译后的JavaScript文件,相当于IDE里的F8编译。这里需要注意的是,如果发布面板那里勾选了是否重新编译项目
,那开发者在自己的命令行发布流程里就不要再调用这个命令了,否则会导致项目被编译两次,浪费发布时间。
publish
是项目发布,相当于发布面板里点击了发布按钮。这块比较重要,一会拿出来单独介绍。
help
是layaair2-cmd的帮助说明,与 layaair2-cmd -h
显示效果一样。
我们还是先通过layaair2-cmd publish -h
查看一下发布命令的帮助。
回车后输入内容如下:
Usage: layaair2-cmd publish [options]
Options:
-v, --version output the version number
-c, --config Set the publishing platform name[web|wxgame|qqw
anyiwan|bdgame]
-h, --help output usage information
我们通过帮助可以看到,最关键的参数是 -c
,目前支持web、wxgame、qqwanyiwan、bdgame这四个参数。
web
是发布HTML5的web版本。
wxgame
是发布微信小游戏平台。
qqwanyiwan
是发布QQ轻游戏平台(也叫QQ玩一玩)。
bdgame
是发布百度小游戏平台。
layaair2-cmd publish -c wxgame
layaair2-cmd的项目编译(compile)与项目发布(publish)命令必须要在项目的根目录来执行使用。
在调用项目发布命令行前要检查一下,是否有发布平台对应的json,比如发布web版,项目文件夹.laya
目录下,应该有web.json。发布微信小游戏要有wxgame.json。同理,其它小游戏也要有对应的json。如果没有的,那先用LayaAirIDE的发布3.0工具选择对应的平台手工发布一次(特别提醒,一定要用3.0发布工具),发布工具会自动生成对应的json。json中保存的是发布工具中那些发布筛选规则与发布配置信息。
END
超级好玩的空中跑酷3D游戏《极速奔跑少年》点击进入试玩
全民热玩的IO游戏《围地大作战》点击进入试玩
近期推荐阅读:
微信3D小游戏已达数百款,这里肯定有你没玩过的小游戏!
百度即将推出智能小游戏,Layabox率先完成引擎适配支持!
边锋、君海、智明星通、途游、开心网等16家游戏企业急招LayaAir引擎游戏前端程序猿与高级攻城狮!
Layabox为开发者免费获得游戏流量,推出小游戏流量共享平台!
Layabox推出“贡献者支持计划”,扶持开发者生态的贡献者!