我们有一个Kotlin项目,旨在与客户端共享某些类,因此,我们配置了kotlin-maven-plugin
以将某些Kotlin类作为JavaScript吐出:
<configuration>
<outputFile>${project.basedir}/angular/src/assets/kotlin_classes.js</outputFile>
<moduleKind>commonjs</moduleKind>
</configuration>
使用类似以下内容的Kotlin类:
class SomeKotlinClass {
fun someMethod(name: String): String {
return "Happy Birthday, " + name;
}
}
我们遇到的问题是,无论我们使用什么moduleKind
(我们尝试过plain
,umd
,amd
),我们的方法名称似乎在JavaScript文件中具有奇/乱码的后缀:
SomeKotlinClass.prototype.someMethod_6q3v0v$ = function (name) {
return 'Happy Birthday, ' + name
};
这意味着我们在Angular / TypeScript中的调用不能是someMethod()
,而必须是someMethod_6q3v0v$()
,这对我们不起作用。
我的插件配置或我在项目中包含此JavaScript文件的方式有问题吗?我们到那儿已经走了99%,但是最后(奇怪)的障碍阻碍了我们前进。
答案 0 :(得分:1)
可以使用@JSName(...)
注释来设置Javascript中已编译方法的名称。
在这种情况下:
class SomeKotlinClass {
@JsName("someMethod")
fun someMethod(name: String): String {
return "Happy Birthday, " + name;
}
}
然后将其编译为:
SomeKotlinClass.prototype.someMethod = function (name) {
return 'Happy Birthday, ' + name;
};