【问题标题】:How do I add a JS target to a KMM project?如何将 JS 目标添加到 KMM 项目?
【发布时间】:2021-03-21 13:13:43
【问题描述】:

我有一个 AndrodiStudio KMM 项目,我想添加一个 JS 目标。

鉴于 JS 开发仅在 IntelliJ 中可用,我希望我必须在 IDEA 中打开项目添加一个“模块”——但我什至不知道该选择哪一个——它们似乎都没有成为一个“正确”的人:

  • 在 Gradle 部分,有“Kotlin/JS for browser”和“Kotlin/JVM”。添加“Kotlin/JS”会破坏*整个项目的 Gradle 构建。“Kotlin/Multiplatform”听起来不像我想要,因为我已经有了“共享”模块(虽然它不包括 JS)

  • 在 Kotlin 部分,有“KS | IDEA”。显然,我不想在基于 gradle.kts 的项目中添加基于“IDEA 构建系统”的东西。

所以我的问题是:

  • 哪个模块模板是在“iosApp”和“androidApp”旁边添加“jsApp”(或 webApp)的最佳起点(在 AndroidStudio 或 Idea 中?)?

  • 我需要添加什么到“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

【问题讨论】:

  • 还想知道为什么这个 Q 被否决了吗?我忽略了一些简单的事情吗?这是错误的子堆栈吗?
  • 您好!基本上,您只需在您的shared/build.gradle.kts 中添加js() 目标。请参阅this 文档页面。之后,将您的代码添加到/src/jsMain/kotlin。我同意文档可能不清楚添加新目标,值得在 Kotlin 的问题跟踪器上创建一个问题:kotl.in/issue
  • 谢谢,我通过手动复制 kotlin/js 模板的部分来让它工作...(您的链接没有描述需要进入 js() 的内容。我已按照建议提出问题这里:youtrack.jetbrains.com/issue/KT-45612 和这里:github.com/Kotlin/kmm-sample/issues/55 - 将在此处添加我稍后需要做的答案。

标签: android-studio intellij-idea kotlin-multiplatform kotlin-js


【解决方案1】:

通过创建一个新的 Kotlin/JS 项目并将其复制到 KMM 项目中的 jsApp(与 iosApp 等并行)来使其工作。最低 jsApp/build.gradle.kts 似乎是:

plugins {
    kotlin("js")
}

dependencies {
    implementation(project(":shared"))
}

kotlin {
    js() {
        browser {
        }
    }
}

shared/build.gradle.kts 中,我需要将以下 sn-p 添加到 kotlin 部分(平行于 android()ios{...}

    js {
        browser {     
        }
    }

这让我花费的时间比预期的要长:

  • build.gradle.kts 中忘记.kts 和奇妙的错误消息很糟糕
  • 因为 jsApp build.gradle.kts 现在是嵌套的,所以 kotlin 插件显然不能在那里有 version(猜想这对于一致性来说是有意义的)。
  • index.html 中的 js 源文件名需要与模块名匹配(我的情况是jsApp)。
  • 别忘了include(":jsApp")in settings.gradle.kts

推荐步骤:

  • 首先尝试让“网络”模块工作
  • 使用基于 gradle 的运行配置
  • 仅当 Web 示例项目在新结构中工作时,才连接共享代码

【讨论】:

  • android studio js 编译框架成功了吗?我看到这个错误出了什么问题:无法应用插件类'org.gradle.language.base.plugins.LifecycleBasePlugin'。 > 无法添加任务“清理”,因为具有该名称的任务已存在。在 js { 浏览器 { } }
  • 我不记得确切但我认为它有效。有一段时间没有做多少公里,但希望很快能回到它......
  • 其实我现在也遇到了同样的问题
  • 想知道它是否与此问题有关:youtrack.jetbrains.com/issue/KT-33191 ...您是否找到任何解决方法@VadimEksler
  • “诀窍”是从根 build.gradle.kts 中删除 KMM 模板中的 clean 任务。
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2019-01-22
  • 2016-03-31
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多