Haxe:如何防止未使用的类被删除
我的类从未在其他代码中直接提到过,但只能使用Haxe:如何防止未使用的类被删除,haxe,Haxe,我的类从未在其他代码中直接提到过,但只能使用Type.resolveClass访问。我希望它们被编译并包含在应用程序中,但我不知道如何做到这一点。我认为@:keep(或@:keepSub)正是为了这个,但它并没有像我预期的那样工作。我就是这么做的: Main.hx: package; //import Foo; //uncomment this line to make it work class Main { static function main() trace(Type.reso
Type.resolveClass
访问。我希望它们被编译并包含在应用程序中,但我不知道如何做到这一点。我认为@:keep
(或@:keepSub
)正是为了这个,但它并没有像我预期的那样工作。我就是这么做的:
Main.hx
:
package;
//import Foo; //uncomment this line to make it work
class Main {
static function main() trace(Type.resolveClass('Foo'));
}
package;
@:keep class Foo {}
Foo.hx
:
package;
//import Foo; //uncomment this line to make it work
class Main {
static function main() trace(Type.resolveClass('Foo'));
}
package;
@:keep class Foo {}
但是这个跟踪null
(我已经测试过JS和Flash)
即使我使用-dce no
编译,它仍然跟踪null
不确定是编译器问题还是我不了解它是如何工作的。这不是编译器问题,而是正确的行为。如果从未导入模块,则从一开始就不会将其包含在编译中。编译器永远看不到
@:keep
一种常见的解决方法是使用--macro include('package')
(请参阅),这将强制编译包中的所有模块
请注意,通配符导入(导入包。*;
)不起作用,因为:
在包上使用通配符导入时,编译器不会急于处理该包中的所有模块。这意味着,除非显式使用这些模块,否则编译器永远不会看到这些模块,并且它们不是生成的输出的一部分
@:keep
和@:keepSub
仅保留类。在您的例子中,Foo从未包含在编译中,因此编译器没有什么需要保留的
您可以在hxml(或haxe…
命令)中列出应用程序的多个入口点,以包括一些类:haxe-cp src-main MainFoo Foo--interp
将查找Foo。(有关--interp
的更多信息,请点击此处:)
您还可以使用--macro include('my.package')
包含一个包及其所有类,但在您的示例中,您的类位于根包上,我不知道您是否可以包含这个包
有关的更多信息包括: