在 `scala-js 1.x.x` 中的命名空间下导出时使用 `@JSExportTopLevel` 的标准方法
Standard way with for `@JSExportTopLevel` when Exporting under a namespace in `scala-js 1.x.x`
我有两个 类 同名 A 有不同的包一:-
xxx.yyy.v1.A
第二个为:-
xxx.yyy.v2.A
我必须在 scala-js (1.1.1) 中使用 @JSExportTopLevel。
完成这个的标准方法是什么?
之前在 scala-js (0.6.x) 中,我使用了这样的东西:-
@JSExportTopLevel("xxx.yyy.v1.A")
和
@JSExporttopLevel("xxx.yyy.v2.A")
但是对于 scala-js (1.1.1),它现在被删除了。 Exporting under a namespace (deprecated)
注意:- 我在 scala-js 升级中遇到这个问题 0.6.x -> 1.x.x
我的配置:-
scala -> 2.13.3,jvm -> 14,sbt -> 1.3.13,scala-js -> 1.x.x
在命名空间下导出是 deprecated in Scala.js 0.6.26 并最终在 1.x 中删除,因为此类导出与 ECMAScript 模块 export
方面的任何内容都不对应。编译器必须跳过 non-standard 个环节才能使它们看起来正常工作。
正如上面链接的 0.6.26 的发行说明所解释的那样,替代方法是显式构造一个 JS 对象,该对象将保存这些命名空间和要导出的值。你的情况:
object JSNamespacesExports {
@JSExportTopLevel("xxx")
val xxx = new js.Object {
val yyy = new js.Object {
val v1 = new js.Object {
val A = _root_.xxx.yyy.v1.A
}
val v2 = new js.Object {
val A = _root_.xxx.yyy.v2.A
}
}
}
}
(_root_.
用于强制将 xxx
解析为 top-level Scala 包,而不是范围内的 val xxx
。)
使用此编码,您可以明确选择希望 xxx
的显示方式,如 JavaScript 所示。这比 Scala.js 0.6.x 使用的不透明 half-baked 实现更透明。
我有两个 类 同名 A 有不同的包一:-
xxx.yyy.v1.A
第二个为:-
xxx.yyy.v2.A
我必须在 scala-js (1.1.1) 中使用 @JSExportTopLevel。
完成这个的标准方法是什么?
之前在 scala-js (0.6.x) 中,我使用了这样的东西:-
@JSExportTopLevel("xxx.yyy.v1.A")
和
@JSExporttopLevel("xxx.yyy.v2.A")
但是对于 scala-js (1.1.1),它现在被删除了。 Exporting under a namespace (deprecated)
注意:- 我在 scala-js 升级中遇到这个问题 0.6.x -> 1.x.x
我的配置:-
scala -> 2.13.3,jvm -> 14,sbt -> 1.3.13,scala-js -> 1.x.x
在命名空间下导出是 deprecated in Scala.js 0.6.26 并最终在 1.x 中删除,因为此类导出与 ECMAScript 模块 export
方面的任何内容都不对应。编译器必须跳过 non-standard 个环节才能使它们看起来正常工作。
正如上面链接的 0.6.26 的发行说明所解释的那样,替代方法是显式构造一个 JS 对象,该对象将保存这些命名空间和要导出的值。你的情况:
object JSNamespacesExports {
@JSExportTopLevel("xxx")
val xxx = new js.Object {
val yyy = new js.Object {
val v1 = new js.Object {
val A = _root_.xxx.yyy.v1.A
}
val v2 = new js.Object {
val A = _root_.xxx.yyy.v2.A
}
}
}
}
(_root_.
用于强制将 xxx
解析为 top-level Scala 包,而不是范围内的 val xxx
。)
使用此编码,您可以明确选择希望 xxx
的显示方式,如 JavaScript 所示。这比 Scala.js 0.6.x 使用的不透明 half-baked 实现更透明。