我想用Kotlin编写一些代码,这样基于JVM的后端和基于JS的前端都可以使用它。要执行前者(使用新的IR编译器),必须使用@JsExport注解类,但是,如果我尝试为JVM使用build相同的文件,它会中断,因为该注解无法识别。(这些是具有独立Gradle配置的独立项目,但链接到相同的Kotlin源代码树。它 * 不是 * 单个“多平台”构建。
@JsExport
eiee3dmh1#
要实现这种分离和可重用性,您需要三个相互依赖的gradle子模块1.共享“模块。具有公共代码的模块1.后端模块。纯粹的Kotlin/jvm模块1.前端模块。一个纯粹的Kotlin/js模块您的gradle项目结构应如下所示
project-root - shared - src/commonMain/kotlin - build.gradle.kts - backend - src/main/kotlin - build.gradle.kts - frontend - src/main/kotlin - build.gradle.kts - settings.gradle.kts
shared/build.gradle.kts应如下所示
shared/build.gradle.kts
plugins { kotlin("multiplatform") }
然后backend/build.gradle.kts
backend/build.gradle.kts
plugins { kotlin("jvm") } kotlin { sourceSets { val main by getting { dependencies { implementation(projects(":shared")) } } } }
plugins { kotlin("js") } kotlin { sourceSets { val main by getting { dependencies { implementation(projects(":shared")) } } } }
然后settings.gradle.kts
settings.gradle.kts
include(":shared",":backend",":frontend")
通过这种安排,您可以在shared/src/commonMain/kotlin中编写共享代码,并在它们各自的backend或frontend子模块上编写环境特定的代码注意:已尽量减少上述Gradle配置,以缩小说明范围
shared/src/commonMain/kotlin
backend
frontend
1cklez4t2#
@JsExport注解可以正常工作,前提是您位于 common 源集中。我举了一个简单的例子:https://github.com/SimonCJacobs/JsExportExample运行Gradle任务“jsRun”或“jvmRun”,查看在两个平台中使用JS IR编译器的@JsExport。
2条答案
按热度按时间eiee3dmh1#
要实现这种分离和可重用性,您需要三个相互依赖的gradle子模块
1.共享“模块。具有公共代码的模块
1.后端模块。纯粹的Kotlin/jvm模块
1.前端模块。一个纯粹的Kotlin/js模块
您的gradle项目结构应如下所示
shared/build.gradle.kts
应如下所示然后
backend/build.gradle.kts
然后
backend/build.gradle.kts
然后
settings.gradle.kts
通过这种安排,您可以在
shared/src/commonMain/kotlin
中编写共享代码,并在它们各自的backend
或frontend
子模块上编写环境特定的代码注意:已尽量减少上述Gradle配置,以缩小说明范围
1cklez4t2#
@JsExport
注解可以正常工作,前提是您位于 common 源集中。我举了一个简单的例子:https://github.com/SimonCJacobs/JsExportExample
运行Gradle任务“jsRun”或“jvmRun”,查看在两个平台中使用JS IR编译器的@JsExport。