Kotlin多平台项目上的Js模块构建失败
生成失败,并显示错误消息: 在./output.js模块中找不到错误:错误:无法解析“common” 在'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js中 340:91-108 在./output.js模块中找不到错误:错误:无法解析“kotlin” 在'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js中 340:18-35 在./output.js模块中找不到错误:错误:无法解析 “C:\Users\User\Documents\MultiPlatformTodo\web\web”中的“kotlin react” @./output.js 340:37-60 在./output.js模块中找不到错误:错误:无法解析 中的“kotlin react dom” 'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js 340:62-89 在./output.js模块中找不到错误:错误:无法解析 中的“kotlinx coroutines core” 'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js 340:110-144 在./output.js模块中找不到错误:错误:无法解析 中的“kotlinx html js” 'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js 340:146-172 失败:生成失败,出现异常Kotlin多平台项目上的Js模块构建失败,kotlin,kotlin-multiplatform,kotlin-js,Kotlin,Kotlin Multiplatform,Kotlin Js,生成失败,并显示错误消息: 在./output.js模块中找不到错误:错误:无法解析“common” 在'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js中 340:91-108 在./output.js模块中找不到错误:错误:无法解析“kotlin” 在'C:\Users\User\Documents\MultiPlatformTodo\web\web'@./output.js中 340:18-35 在./output
- 错误:任务“:web:webpack bundle”的执行失败。 节点webpack.js失败(退出代码=2)
build.gradle
定义如下:
apply plugin: 'org.jetbrains.kotlin.frontend'
apply plugin: 'kotlin2js'
kotlinFrontend {
npm {
dependency("react", "16.6.0")
dependency("react-dom", "16.6.0")
dependency("@material-ui/core", "1.4.3")
}
sourceMaps = true
webpackBundle {
bundleName = "mpnotes"
contentPath = file('src/main/web')
}
}
dependencies {
implementation project(':common')
implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-html-js:0.6.11"
implementation "org.jetbrains:kotlin-react:16.6.0-pre.61-kotlin-1.3.0"
implementation "org.jetbrains:kotlin-react-dom:16.6.0-pre.61-kotlin-1.3.0"
}
compileKotlin2Js {
kotlinOptions {
outputFile = "${projectDir}/web/output.js"
metaInfo = true
moduleKind = "commonjs"
sourceMap = true
}
}
和settings.gradle
:
enableFeaturePreview('GRADLE_METADATA')
rootProject.name = 'MultiPlatformTodo'
include 'android'
include 'web'
include 'common'
以下是common
模块的内容:
apply plugin: 'kotlin-multiplatform'
kotlin {
targets {
fromPreset(presets.jvm, 'jvm')
fromPreset(presets.js, 'js')
}
sourceSets {
commonMain {
dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutines_version"
}
}
commonTest {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-test-common"
implementation "org.jetbrains.kotlin:kotlin-test-annotations-common"
}
}
jvmMain {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
}
}
jsMain {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$coroutines_version"
}
}
}
}
kotlin {
experimental {
coroutines "enable"
}
}
我看到两个可能的问题 首先,您应该使用多平台gradle插件来代替
kotlin2js
,即kotlin multiplatform
,后者较新且将获得更长期的支持,或者kotlin platform js
,后者可能更容易替代您当前的设置
另一个问题是行
实现项目(':common')
。这告诉gradle您将公共模块作为js依赖项使用,因为这是一个js项目。对于kotlin platform js
,您应该改为使用expectedBy project(“:common”)
将其链接为公共依赖项。对于kotlin multiplatform
,您需要对依赖项配置进行更多的更改。你可以看到一些细节我知道有点晚了,但是如果你在build.gradle
中添加apply plugin:'kotlin dce js'
,你就可以开始了我在这里提到的js模块不是一个js库,而是一个使用common
库的常规js模块。需要使用kotlin2js
插件将其中的kotlin代码转换为js,以便在html文件中引用。还请发布common
项目构建脚本的内容。@Ilya刚刚用common
更新了问题project@EdsonMenegatti任何你能解决的机会。