[LayaAirIDE 2.0]LayaAirIDE2.7版本导出类名不正确问题

如果你的项目代码类型是TypeScript,从LayaAirIDE 2.7版本开始导出的类名所在命名空间就不再是清一色的Laya命名空间,如“Laya.xxx”,而会出现小写的laya命名空间,一般为“laya.display.xxx”。
如果你读过Laya2.7中的框架源码,那么可以发现在这个版本中,window上面不会挂载小写laya命名空间,而只会挂载大写Laya的命名空间,故访问小写laya命名空间时会报错“laya is not defined”。
//laya.core.js源码,可以看到只在window上挂载了大写Laya的命名空间
window.Laya= (function (exports) {
......
exports.Sprite = Sprite;
exports.EffectAnimation = EffectAnimation;
.....
return exports;
})({}))
那么出现这个问题的原因是官方在LayaAirIDE类导出部分的代码有变化,在2.6版本中有这样一句:

Laya2.6_.png

但这句在2.7版本中改成了这样

Laya2.7_.png

那么在2.7版本中的这句话是什么意思呢?意思是从LayaAirIDE安装目录中的resources\app\out\vs\layaEditor\renders\laya.editorUI.xml文件中取出类名对应XML节点的runClass属性值作为TS导出的类名,那么很显然在这XML里的runClass全部都是小写的laya命名空间

layaEditorUI.png

 
那么临时的解决方案就是修改刚才截图中提到的layabuilder.max.js文件(文件完整路径可以看截图中文件名下方的breadcrumbs)中红框代码,将其修改为和2.6版本中一致就行,或者你可以装回LayaAirIDE2.6版本。
不过最终解决方案当然是官方能够及早修复此问题并在下一版中让我们能免除后顾之忧
已邀请:

kylin9718

赞同来自:

你用的是官方提供的版本?
这两处修改是同时做的,并且仅提供给了论坛上部分开发者,还没有正式发出去。

S_eVent

赞同来自:

如果小写的laya命名空间作为属性变量的类型使用的话是没有问题的,因为编译成js后会去掉。但一旦作为父类被继承的话就会报错了,我这边是.efc文件导出为EffectAnimation类型时发生的报错,给我导出成了laya.display.EffectAnimation,然后在继承该类时出现了laya is not defined的报错

kylin9718

赞同来自:

参考这个回答,将对应的文件修改一下就行了。
因为修改还没有合并到发布分支,预计发布的时间会在9月份或者10月份
https://ask.layabox.com/question/47163?notification_id=107061&rf=false&item_id=41359&answer_id=41359&single=TRUE#!answer_41359

要回复问题请先

商务合作
商务合作