Kotlin多平台项目上的Js模块构建失败

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

生成失败,并显示错误消息:

在./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

失败:生成失败,出现异常

  • 错误:任务“:web:webpack bundle”的执行失败。 节点webpack.js失败(退出代码=2)
Js模块
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任何你能解决的机会。