Egret社区
本帖最后由 babygogogo 于 2021-7-11 23:11 编辑

如题,我们项目原本是5.2.33,由于编译速度问题而切换到5.4.1+modern模式,却发现每个文件的所有东西都被直接挂载到window对象下了,导致一大堆命名冲突,游戏根本跑不起来。

比如像下面这样的代码:
export function addEventListener(...) {...}
编译后就会直接生成window["addEventListener"] = ...

这直接导致浏览器自带的window.addEventListener被覆盖,从而让游戏各种裂开。
更可怕的是,连没有export的东西也同样会被挂载!

而如果用namespace把文件里的代码包裹起来,又会有以下两种情况:
1. 只用一层namespace,则项目大的情况下,依然有很高的冲突风险
2. 用两层和以上的namespace,编译期会直接报错,无法编译通过

这问题实在是太低级且严重了吧?
还是说是我自己看漏了什么文档,官方有提供什么正确的写法吗?请各位赐教,急!








分享到 :
0 人收藏

2 个回复

倒序浏览
app小王子  社区管理员 | 2021-7-12 10:35:45
直接把一个大项目转换成modern模式比较困难, 建议使用legacy.
关于你说的“用两层和以上的namespace,编译期会直接报错,无法编译通过”,可以按照下图那样,暂时解决下。 image.png
babygogogo  初学乍练 | 2021-7-12 15:03:56
谢谢回复,legacy我也试过了,同样会把东西都挂载到window下,没什么区别。
刚刚还发现了又一个恶心的点,所有enum不论是不是const enum,也不论有没有export、是不是已经包装在namespace里,全都会被统一挂载到window下,直接导致不同文件的内部enum发生冲突……服了……有办法解决吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

babygogogo

初学乍练

积分: 4 帖子: 4 精华: 0

楼主热帖

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部