Gradle中Kotlin JS模块依赖多平台模块时代码不可用如何解决
解决方案
核心原因
你当前遇到的问题由两点配置缺失导致:
- 多平台
:api模块未补全JS目标的标准库依赖,也未显式声明JS目标输出为可被外部依赖的库 - 单平台JS的
:client模块依赖多平台模块时,未指定匹配JS目标的依赖变体
第一步:修改api/build.gradle配置
调整后的完整配置如下:
plugins { id 'org.jetbrains.kotlin.multiplatform' } group 'io.codegoblin' version '1.0-SNAPSHOT' repositories { mavenCentral() } kotlin { jvm() js { useCommonJs() browser() // 新增:显式声明JS目标输出为可被依赖的库 binaries.library() } sourceSets { commonMain { dependencies { implementation kotlin('stdlib-common') } } // 新增:补全JS目标的标准库依赖 jsMain { dependencies { implementation kotlin('stdlib-js') } } // 新增:补全JVM目标的标准库依赖 jvmMain { dependencies { implementation kotlin('stdlib-jdk8') } } } }
第二步:修改client/build.gradle依赖配置
将:api模块的依赖声明调整为指定JS目标变体:
dependencies { // 修改:指定依赖多平台模块的JS运行时变体 implementation project(path: ":api", configuration: "jsRuntimeElements") implementation("org.jetbrains:kotlin-react:17.0.2-pre.154-kotlin-$kotlin_version") implementation("org.jetbrains:kotlin-react-dom:17.0.2-pre.154-kotlin-$kotlin_version") implementation(npm("react", "$react_version")) implementation(npm("react-dom", "$react_version")) }
验证生效
执行以下命令重新构建项目:
./gradlew clean build
构建完成后可以在client/build/js/packages/client/kotlin/目录下看到:api模块编译后的JS代码,同时client模块代码中可以正常导入:api模块的公共类、方法。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

