如何防止在 Haxe 中删除实用程序库的死代码?

How to prevent dead-code removal of utility libraries in Haxe?

我的任务是创建用户输入的一致性测试,这项任务相当棘手,我们需要非常高的可靠性。服务器运行在PHP,客户端运行在JS,我认为Haxe可能会减少重复工作。

但是,我在删除死代码时遇到了问题。因为我只是在创建辅助函数 (utilObject.isMeaningOfLife(42)),所以我没有调用每个辅助函数的主程序。我尝试将 @:keep: 添加到实用程序 class,但无论如何它都被删除了。

我试图通过 -main 开关指定该实用程序 class,但我不得不添加一个虚拟 main() 方法,并且这不会超出单个 [=21] =].

您可以使用编译器参数强制将给定包及其子包中定义的所有文件包含在构建中。

haxe --macro include('my.package') ..等等

这是 macro.Compiler.include 功能的快捷方式。 如您所见,此函数的签名允许您递归执行它并排除包。

static include (pack:String, rec:Bool = true, ?ignore:Array<String>, ?classPaths:Array<String>):Void

我认为在那种情况下您不必为每个库 class.

使用 @:keep

我不确定这是否是您要找的,希望对您有所帮助。 否则这可能有助于检查:

  • 代码不用就砍掉了不好吗?
  • 也可能是在最终输出中内联了一些代码?
  • 使用评论中提到的编译器标志 -dce std 编译您的代码。
  • 如果您使用静态分析器,请不要使用它。
  • 添加 @:keep 并在某处引用 class+ 函数。
  • 否则,如果可以重现,请提供最小设置。