LayaAir IDE 项目发布3.0 详解(含命令行发布)

本篇文档基于 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的轻游戏平台中。

百度小游戏 是指发布为已适配百度小游戏的项目,发布后的项目可以运行于百度开发者工具内(关于百度小游戏可阅读相关的文档)。

二、Node-glob模块在压缩与版本管理功能的应用

混淆压缩与版本管理是发布时比较常用的功能。但如何更灵活的管理和控制哪些目录和文件是要压缩,或者哪些是要启动版本管理的,哪些是不需要的。LayaAirIDE也是进行了多次的优化和改版,自发布3.0开始,在发布功能中内置了node-glob模块,可以让目录与文件的匹配工作变的更加灵活。

LayaAirIDE的发布功能默认集成了常用的排除与包含功能,也允许开发者自定义文件筛选匹配规则。下面将结合发布3.0面板中的功能进行逐个说明介绍。

1、压缩功能(JSON、JS、图片)

当勾选是否压缩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压缩后,会混淆代码,让代码可读性变的很差,影响调试。

2、启用版本管理

关于版本管理,最开始是采用链接后加随机数的方式来管理,但是微信等环境下,缓存问题很严重,随机数方式并不能有效解决缓存问题,还是会出现因更新版本导致页面混乱等现象出现。因此,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字符串。

三、提取本地包

微信、百度等小游戏的平台比较火热。但因为这些平台都存在本地包的概念,并且对包体有限制,所以提取本地包的功能以及易用性就显的非常重要,目前的版本也是历经多次优化后的最友好版本,优化了以前种种的不便,完全可以满足开发者一键发布为小游戏项目本地包的需求。具体的本地包相关的介绍和文档直接查看对应的文档,这里重点介绍一下如何提取。

1、选择文件

点击选择文件右则的输入框会弹出如图4这样的bin目录结构树。开发者勾选本地包中要使用的代码或者资源。点击确定后,会自动保存已选择的目录和文件,以便于发布工具筛选和复制提取指定的本地包内容。

(图4)

2、目标目录

默认不选的时候,本地包目录会在release目录下创建一个wxgame_pack目录,用于存放本地包的内容。当然,开发者也可以随意指定一个目录,用于存放小游戏项目的本地包内容。

具体操作为:点击图5 目标目录 右侧的输入框选定对应的目录即可。

(图5)

小游戏的提取文件就选择文件目标目录这两个核心功能,别看操作简单,却是非常实用的功能。

最早的版本不能提取本地包,全包复制的提取比较麻烦。又或者复制时如果遗漏了小游戏项目文件,那还需要再手工复制。这些问题在这个版本统统得到了解决,不仅本地包目录可以自定义筛选。选择对应的小游戏平台后,该平台对应的项目文件即使不勾选到本地包文件列表,也会自动提取过去,保障小游戏项目的完整性。

四、其它功能

(图6)

1、开放域项目

微信和百度等小游戏开放域项目默认的入口文件和主域的入口文件并不一样,所以勾选是否为微信/百度开放数据域项目后,会自动将入口的问题处理好,不用开发者每次在发布后,手工处理。极大的增加了开发者的小游戏发布易用性。

Tips:对于不支持开放域的平台,会在选择不同平台后,自动屏蔽了功能的勾选。

2、发布前重新编译

如果开发者担心因为遗忘了编译,导致发布的代码并非最近代码的话,可以勾选是否重新编译项目,勾选后会在每次发布时先编译项目再执行发布流程。可以避免因遗忘编译导致的项目发布后报错。

五、发布过程的体验优化

由于最终发布的时候,通常还是不可避免要对图片,js,json等进行压缩,如果项目越大,那发布编译的时间也越长,这个很难避免,尤其是JS压缩还需要分析语法并进行混淆。

之前有不少不太理解的开发者反馈发布时间过长,这个时间的长短取决于勾选的压缩内容及项目大小,所以只能建议开发者在不是最终发布的时候,调试阶段不要进行混淆和压缩。

本次3.0版本优化的时候,考虑到开发者的需求,除了让开发者自由选择控制可压缩的文件,还增加了发布编译过程的实时打印显示。让开发者能大概了解到当前所处的产品编译发布进度,减少处于未知状态时的急迫情绪。

LayaAir引擎官方比较重视开发者的体验反馈,并持续不断的进行着优化。

(图7)

六、命令行发布

对于一些存在制作自动打包工具需求的开发者,项目发布3.0还提供了layaair2-cmd命令行发布方式。开发者可以使用layaair2-cmd在不打开IDE的情况下对layaair 2.0项目进行压缩、版本管理、引擎适配等编译发布等操作。可以避免多个项目之间发布时的繁琐切换流程。

1、layaair2-cmd 安装方式

npm install layaair2-cmd -g

如果有npm安装都不会用的开发者请面壁并跳过命令行发布文档,老老实实的用LayaAirIDE的界面发布。

2、layaair2-cmd 都支持哪些命令

我们通过输入 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]

layaair2-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显示效果一样。

3、项目发布命令的使用与注意事项

我们还是先通过layaair2-cmd publish -h查看一下发布命令的帮助。

回车后输入内容如下:

    Usage: layaair2-cmd publish [options]

    Options:
    -v, --version              output the version number
    -c, --config <configPlatform>  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

发布注意事项

  1. layaair2-cmd的项目编译(compile)与项目发布(publish)命令必须要在项目的根目录来执行使用。
  2. 在调用项目发布命令行前要检查一下,是否有发布平台对应的json,比如发布web版,项目文件夹.laya目录下,应该有web.json。发布微信小游戏要有wxgame.json。同理,其它小游戏也要有对应的json。如果没有的,那先用LayaAirIDE的发布3.0工具选择对应的平台手工发布一次(特别提醒,一定要用3.0发布工具),发布工具会自动生成对应的json。json中保存的是发布工具中那些发布筛选规则与发布配置信息。

END

原文发布于微信公众号 - Layabox(layabox)

原文发表时间:2019-01-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券