Scala.js 类 列表实际上链接到 fastOpt.js/ fullOpt.js?

List of Scala.js classes actually linked into fastOpt.js/ fullOpt.js?

我正在编写一个 sbt 插件,它根据特定的 StaticAnnotation 类型创建一个 JS 文件;我宁愿只在 类 上发出实际上由 fastOptJS / fullOptJS 链接的注释,而不是包括在类路径上找到的所有注释。为此,我可以利用 Scala.js 链接器工具或 sbt 插件吗?

是的,你可以。 Scala.js 工具 API(linker 工具)提供了一种名为 Analysis 的数据类型,其中包含您需要的一切。

您可以为类路径上的 .sjsir 文件构建一个 AnalysisAnalyzer.computeReachability. You have to give it the appropriate ClassInfo

这已在 the callgraph sbt plugin 中完成,尽管仍在开发中,但展示了如何为 sbt 项目构建 Analysishttps://github.com/lionelfleury/scala-js-call-graph/blob/065506bf9a9c12ccc54fed056fed878e6f18b328/sbt-scalajs-callgraph/src/main/scala/ch/epfl/sbtplugin/CallGraphPlugin.scala#L28-L49

此特定实现选择 Analysis after 优化已执行(除非程序不 link,在这种情况下它回退到在执行 优化之前分析 )。根据您的用例,您可能更喜欢其中一个,但您更有可能想要 after optimizations.

版本

一旦你有了一个 Analysis,你可以简单地列出它的 classInfo 成员,并过滤掉那些 .isNeededAtAll 为假的成员。同样,根据您的情况,您希望使用更精细的测试,例如 .isAnySubclassInstantiated.