在Angular/客户端项目中使用传输到JavaScript的Kotlin代码
我们有一个Kotlin项目,其中一些类打算与客户端共享,因此我们配置了在Angular/客户端项目中使用传输到JavaScript的Kotlin代码,javascript,angular,kotlin,Javascript,Angular,Kotlin,我们有一个Kotlin项目,其中一些类打算与客户端共享,因此我们配置了Kotlin maven插件,将某些Kotlin类作为JavaScript输出: <configuration> <outputFile>${project.basedir}/angular/src/assets/kotlin_classes.js</outputFile> <moduleKind>commonjs</moduleKi
Kotlin maven插件
,将某些Kotlin类作为JavaScript输出:
<configuration>
<outputFile>${project.basedir}/angular/src/assets/kotlin_classes.js</outputFile>
<moduleKind>commonjs</moduleKind>
</configuration>
我们遇到的问题是,无论我们使用什么moduleKind
(我们尝试了plain
,umd
,amd
),我们的方法名在JavaScript文件中似乎都有一个奇怪/混乱的后缀:
SomeKotlinClass.prototype.someMethod_6q3v0v$ = function (name) {
return 'Happy Birthday, ' + name
};
这意味着我们在Angular/TypeScript中的调用不能是对someMethod()
,它们必须是对someMethod\u 6q3v0v$()
,这对我们不起作用
我的插件配置是否有问题,或者我在项目中包含此JavaScript文件的方式是否有问题?我们已经完成了99%的工作,但最后一个(奇怪的)障碍阻碍了我们。可以使用
@JSName(…)
注释设置Javascript中编译方法的名称
在这种情况下:
class SomeKotlinClass {
@JsName("someMethod")
fun someMethod(name: String): String {
return "Happy Birthday, " + name;
}
}
然后将其编译为:
SomeKotlinClass.prototype.someMethod = function (name) {
return 'Happy Birthday, ' + name;
};
Javascript中已编译方法的名称可以使用
@JSName(…)
注释设置
在这种情况下:
class SomeKotlinClass {
@JsName("someMethod")
fun someMethod(name: String): String {
return "Happy Birthday, " + name;
}
}
然后将其编译为:
SomeKotlinClass.prototype.someMethod = function (name) {
return 'Happy Birthday, ' + name;
};
@JsName注释应该可以解决您当前的问题。然而,正如我在博客中所描述的,还有许多其他问题。例如:-使用kotlin类型-生成.d.ts文件-将kotlin生成的代码放入node_modules目录(或资产)我很感兴趣您自己是如何解决这些问题的?@JsName注释应该可以解决您当前的问题。然而,正如我在博客中所描述的,还有许多其他问题。例如:-使用kotlin类型-生成.d.ts文件-将kotlin生成的代码放入node_modules目录(或资产),我想知道您自己是如何解决这些问题的?