如何将JS目标添加到KMM项目?
我有一个 AndrodiStudio KMM 项目,我想添加一个 JS 目标。
鉴于 JS 开发仅在 IntelliJ 中可用,我希望我必须在 IDEA 中打开项目添加一个“模块”——但我什至不知道选择哪个——它们似乎都不是“正确”适合:
-
在 Gradle 部分,有“用于浏览器的 Kotlin/JS 和“Kotlin/JVM”。添加“Kotlin/JS”会破坏*整个项目的 Gradle 构建。“Kotlin/Multiplatform”听起来不像我想要的我已经有了“共享”模块(虽然它不包括 JS)
-
在 Kotlin 部分,有“KS | IDEA”。显然,我不想将基于“IDEA 构建系统”的内容添加到基于 gradle.kts 的项目中。
所以我的问题是:
-
哪个模块模板是在“iosApp”和“androidApp”(在 AndroidStudio 或 Idea 中?)旁边添加“jsApp”(或 webApp)的最佳起点?
-
我需要向“shared/build.gradle.kts”添加什么来支持“jsMain”和“jsTest”文件夹?是否有不同/更好的起点(例如,Github 上涵盖所有平台的教程或最小的“helloWorld”示例)?
我的代码的当前结构与 Android Studio 中的 KMM 项目模板 1:1 对应:https : //github.com/stefanhaustein/komponents
*) 错误信息:
Error resolving plugin [id: 'org.jetbrains.kotlin.multiplatform', version: '1.4.31']
> Plugin request for plugin already on the classpath must not include a version
回答
通过创建一个新的 Kotlin/JS 项目并将其复制到jsAppKMM 项目中(平行于iosApp等)使其工作。最低限度jsApp/build.gradle.kts似乎是:
plugins {
kotlin("js")
}
dependencies {
implementation(project(":shared"))
}
kotlin {
js() {
browser {
}
}
}
在 中shared/build.gradle.kts,我需要将以下代码段添加到 kotlin 部分(与android()和ios{...}
js {
browser {
}
}
为什么这花了我比预期更长的时间的陷阱:
- 糟糕的时期遗忘
.kts的build.gradle.kts和梦幻般的错误信息 - 因为 jsApp
build.gradle.kts现在是嵌套的,所以 kotlin 插件version显然不能在那里(猜测它对一致性有意义)。 - js 源文件名
index.html需要匹配模块名(jsApp在我的例子中)。 - 不要忘记
include(":jsApp")在settings.gradle.kts
推荐步骤:
- 尝试首先让“web”模块工作
- 使用基于 gradle 的运行配置
- 只有当web示例项目在新结构下工作时,才连接共享代码