Laya打包时,直接使用发布即可:
1.发布平台:
现在Laya支持的平台,还是挺多的,根据需要自己选择即可。
2.是否压缩Json:
一般是建议勾选的,压缩后,体积会大大降低。
3.是否压缩图片:
根据美术需求,如果追求品质,可不勾选。若是没有美术要求,建议勾选,压缩后,体积会大大降低。
4.是否压缩JS:
一般是建议勾选的,压缩后,体积会大大降低。如果是在微信小游戏,调试时,可先不压缩,断点时,可轻松的看到代码错误行。待正式发布时再勾选。
5.是否开启版本管理:
一般都是需要的,建议勾选。勾选后发布时,会在文件后面带上hash码,文件内容有更改时hash码会变,可实现增量更新。
注意:
1.游戏内的资源,统一使用相对目录res,比如: image.skin = “res/image/logo.png”
2.非游戏内的资源,直接使用http绝对地址,加载时不走版本控制,需要自己单独写更新机制。
3.游戏内直接使用,不带hash码的源文件名字即可。引擎会在内部,根据version.json映射的hash名字进行加载。
4.第一项是否压缩json,要将altas去掉,因为生成带版本的atlas文件会失去换行,导致laya引擎无法解析。
5.第六项发布排除文件,不要勾选,否则res资源无法生成版本号。微信开发者工具,上传时设置忽略res即可。
//激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
//需要设置 远程资源地址 本地调试设置为""即可
Laya.URL.basePath = Define.cdn;
//核心方法
URL.formatURL(url);
重点类:laya.core.js URL
class URL {
constructor(url) {
this._url = URL.formatURL(url);
this._path = URL.getPath(url);
}
get url() {
return this._url;
}
get path() {
return this._path;
}
static set basePath(value) {
URL._basePath = ILaya.Laya._getUrlPath();
URL._basePath = URL.formatURL(value);
}
static get basePath() {
return URL._basePath;
}
static formatURL(url) {
if (!url)
return "null path";
//绝对地址,直接反问,不走版本控制
if (url.indexOf(":") > 0)
return url;
if (URL.exportSceneToJson)
url = URL.getAdptedFilePath(url);
//走版本控制,此方法在ResourceVersion设置
if (URL.customFormat != null)
url = URL.customFormat(url);
var char1 = url.charAt(0);
if (char1 === ".") {
return URL._formatRelativePath(URL._basePath + url);
}
else if (char1 === '~') {
return URL.rootPath + url.substring(1);
}
else if (char1 === "d") {
if (url.indexOf("data:image") === 0)
return url;
}
else if (char1 === "/") {
return url;
}
return URL._basePath + url;
}
重点类:laya.core.js ResourceVersion
class ResourceVersion {
static enable(manifestFile, callback, type = 2) {
ResourceVersion.type = type;
ILaya.loader.load(manifestFile, Handler.create(null, ResourceVersion.onManifestLoaded, [callback]), null, Loader.JSON);
}
static onManifestLoaded(callback, data) {
ResourceVersion.manifest = data;
//在这里设置,URL 版本控制方法
URL.customFormat = ResourceVersion.addVersionPrefix;
callback.run();
if (!data) {
console.warn("资源版本清单文件不存在,不使用资源版本管理。忽略ERR_FILE_NOT_FOUND错误。");
}
}
static addVersionPrefix(originURL) {
if (ResourceVersion.manifest && ResourceVersion.manifest[originURL]) {
if (ResourceVersion.type == ResourceVersion.FILENAME_VERSION)
return ResourceVersion.manifest[originURL];
return ResourceVersion.manifest[originURL] + "/" + originURL;
}
return originURL;
}
}
发布后:
生成version.json配置,Main.ts代码中的version.json,会自动加上版本号。
6.发布排除文件:
这个功能挺好的,最常见的是:排除bin/res。我们一般Asset的图集资源,都会自动发布到这个atlas目录(可更换),还有自己的一些资源(声音,背景图,json等),都在res目录下。发布时,需要将res放到远程资源服务器上,和代码包分开,使用排除就可以轻松做到了。
微信小游戏,上传时,可忽略res目录,修改project.config.json。上传时,偶尔会报错:找不到XX,直接重启开发者工具,大部分可解决。
"packOptions": {
"ignore": [{
"type": "folder",
"value": "res"
}],
"include": []
}
7.是否提取本地包:
这个功能没有用过,可能就是把本地包单独,放到一个文件夹吧。
8.保留平台配置文件:
比如选择:微信小游戏,game.js,game.json和project.config.json 这三个文件是微信小游戏必须有的,不能改名字,可以在里边配置一些内容,再次发布时,这里边的内容不会变化。
9.是否使用引擎插件:
应该是对引擎的兼容的一个处理吧,默认是不勾选的。
10.是否为微信/百度开放数据域项目:
比如选择:微信小游戏,可以把用户的分数,通过wx.setUserCloudStorage放到云端。我们要做一个排行榜展示,排行榜的数据不能在当前项目中直接获得,需要创建一个子域,即开放域项目,可以认为是一个单独子项目。排行榜是通过请求生成的一个贴图,然后在sharedCanvas绘制出来。
11.是否只拷贝index.js里引用的类库:
默认是勾选的,这样可以在打包时,只打包自己用到的类库,减少包体积。
12.是否使用压缩版类库:
默认是勾选的,bin/libs/min,一般调试使用的是bin/libs下面类库js,到正式发布时,使用bin/libs/min下面类库js,这个是压缩过的,可以减少包体积。
13.ES6转ES5:
默认不勾选,ES6是新标准,能使用ES6则使用。
14.是否重新编译:
不放心,勾选即可,每次打包时再编一下,没啥坏处。
使用命令 发布打包
命令:layaair2-cmd 官方文档
安装低版本cnpm:
npm install cnpm@7.1.0 -g --registry=https://registry.npm.taobao.org
cnpm i layaair2-cmd -g
Set-ExecutionPolicy RemoteSigned -Scope Process
有可能会出现一下错误:
ReferenceError: primordials is not defined
at fs.js:42:5
at req_ (C:\Users\shambala\AppData\Roaming\npm\node_modules\layaair2-cmd\node_modules\natives\index.js:143:24)
at Object.req [as require] (C:\Users\shambala\AppData\Roaming\npm\node_modules\layaair2-cmd\node_modules\natives\index.js:55:10)
at Object.<anonymous> (C:\Users\shambala\AppData\Roaming\npm\node_modules\layaair2-cmd\node_modules\graceful-fs\fs.js:1:37)
at Module._compile (node:internal/modules/cjs/loader:1267:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1321:10)
at Module.load (node:internal/modules/cjs/loader:1125:32)
at Module.require (node:internal/modules/cjs/loader:1149:19)
at require (node:internal/modules/helpers:121:18)
主要原因是 graceful-fs这个版本较低,运行npm graceful-fs@4.2.2,安装到本项目后,在复制到C:\Users\XX\AppData\Roaming\npm\node_modules\layaair2-cmd\node_modules即可
//HTML5版本发布命令
layaair2-cmd publish -c web
//微信小游戏版本发布命令
layaair2-cmd publish -c wxgame