Laya打包经验总结

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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值