[LayaAirIDE3]发布后的bundle.js,类的定义顺序错误

未发布前是可以正常运行的,发布后运行就报错(web和微信小程序都是)。
检查后发现,发布后的代码,有一个父类的申明放到了很后面的位置,子类在前,所以继承时父类为undefined。
手动调整位置后可以正常运行。
子类位置
1.png

父类位置
2.png

发布前bin下bundle.js顺序是正常的。
这个父类是一个通用的父类,很多文件都在引用。
别的基类也出现过类似情况。
 
代码本身引用关系等应该是没有问题的,因为预览可用。
推测是打包管线的部分编译优化插件有问题,比如Tree-shaking之类的,但是打包管线好像无法修改?
完整项目无法提供Demo,且简单环境无法复现。
 
layaide版本:3.1.6
 
已邀请:

layabox

赞同来自:

一、未发布的预览没问题,是由于没有剔除不用的组件。发布后只包含发布所需的部分,所以预览和发布未必一致,这是正常的。
 
如果想发布后也和不发布的一致,编译选项里勾选保留所有组件就行了。操作步骤为:项目设置->脚本编译->发行版本选项->保留未被使用的组件脚本。
 
二、你的问题是循环引用问题导致,
 
循环引用是不稳定的,无论在什么情况都有几率是好的,有几率是坏的。这个引擎不好干预,需要开发者自行解决代码中的循环引用问题。

正阳子

赞同来自: layabox

上面不就是方案了吗,不要让类相互继承,然后又相互引用就解决了,比如
 
export default class A{
 
//public instance:B  这种就是相互继承,然后又相互引用,改为:
public instance:any
 
}
 
export default class B extends A{
 
}

正阳子

赞同来自:

laya这种类顺序问题是类相互循环引用导致,比如A,B相互继承,然后又相互引用,100%导致引擎出现这种问题,有可能引擎bug,laya不支持类相互循环引用,egret就可以,可惜egret短命

狂蜂浪蝶

赞同来自:

求个方案

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作