如何解决在`scala-js 1.x.x`的命名空间下导出时,@@ JSExportTopLevel`的标准方式
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.xx
解决方法
在命名空间下进行导出是deprecated in Scala.js 0.6.26,并最终在1.x中删除,因为就ECMAScript模块export
而言,此类导出与任何内容都不对应。编译器不得不跳过非标准箍,以使它们看起来可以工作。
正如上面链接的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
解析为顶级Scala软件包,而不是范围内的val xxx
。)
使用这种编码,您可以明确选择xxx
的显示方式,如JavaScript所示。这比Scala.js 0.6.x使用的不透明,半生不熟的实现更为透明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。