Kotlin多平台项目中如何配置JS编译器的moduleKind?
解决Kotlin多平台项目中JS模块类型(moduleKind)的设置问题
针对你使用Kotlin 1.8.10多平台项目遇到的moduleKind配置无效问题,正确的配置方式是直接在JS目标的代码块内,针对编译单元配置编译器选项,具体修改如下:
修改你的build.gradle.kts中的js(IR)块:
js(IR) { compilerOptions { moduleKind.set(org.jetbrains.kotlin.gradle.dsl.JsModuleKind.COMMONJS) } browser { commonWebpackConfig { cssSupport { enabled.set(false) } } webpackTask { output.libraryTarget = "commonjs2" } } binaries.executable() }
或者如果需要更精准地针对主编译单元配置,可以写成:
js(IR) { compilations.main { compilerOptions.configure { moduleKind.set(org.jetbrains.kotlin.gradle.dsl.JsModuleKind.COMMONJS) } } // 其余browser、binaries配置不变 }
为什么之前的方法失效:
- 你尝试的第一种方式中,
compileKotlinJs任务名不适用于多平台项目的JS可执行二进制构建,这类项目的JS编译任务名通常带有DevelopmentExecutable前缀(如compileDevelopmentExecutableKotlinJs),直接指定compileKotlinJs会找不到任务。 - 第二种方法如果未针对JS目标的编译单元配置,而是全局获取的
compilerOptions,自然不会包含JS专属的moduleKind属性。
另外注意,如果你已经在webpack配置中设置了libraryTarget = "commonjs2",确保moduleKind的配置和webpack的输出目标匹配,避免冲突。
内容的提问来源于stack exchange,提问作者waterstopper
相关产品推荐
相关产品推荐

