You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Kotlin代码兼容JVM后端与JS前端并实现JS导出?

解决方案

方法一:为JVM项目提供空的@JsExport注解实现

由于JVM项目编译时无法识别Kotlin/JS标准库的kotlin.js.JsExport注解,你可以在JVM项目的源码中创建一个同名的空注解类,让编译器跳过错误:

  1. 在JVM项目的src/main/kotlin/kotlin/js路径下创建JsExport.kt文件
  2. 写入以下代码:
package kotlin.js

@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
annotation class JsExport

这样JVM编译时会识别这个本地注解,不会报错;而JS项目仍会使用标准库中的@JsExport,完全不影响导出功能。

方法二:使用expect/actual注解适配双平台

这种方式更符合Kotlin的平台适配规范,通过定义期望注解,再分别为JS和JVM提供实际实现:

  1. 在共用源码中定义expect注解:
@OptionalExpectation
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
expect annotation class JsExport()
  1. 在JS项目中添加actual类型别名,映射到标准库注解:
actual typealias JsExport = kotlin.js.JsExport
  1. 在JVM项目中添加actual空注解:
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
actual annotation class JsExport()

之后你在共用源码中直接使用@JsExport即可,JS项目会正常导出类/方法,JVM项目则会忽略注解的实际作用,保持兼容性。

注意事项

  • 方法一适合快速解决问题,无需修改共用源码,但需注意同步标准库@JsExport的注解目标和保留策略(如果后续标准库有更新)
  • 方法二更具扩展性,能更好地应对后续的平台适配需求,但需要在两个项目中分别维护actual实现

内容的提问来源于stack exchange,提问作者Brian White

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:25:47