Сбой сборки Js-модуля в мультиплатформенном проекте Kotlin - PullRequest
0 голосов
/ 02 декабря 2018

Сборка завершается неудачно с сообщениями об ошибках:

ОШИБКА в ./output.js Модуль не найден: Ошибка: не удается разрешить «общие» в «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 Модуль не найден: Ошибка: не удается разрешить' kotlin-реагировать 'в'C: \ Users \ Пользователь \ Documents \ MultiPlatformTodo \ web \ web '@ ./output.js 340: 37-60

ОШИБКА в ./output.js Модуль не найден: Ошибка: не удается разрешить'kotlin-Reaction-dom 'в' C: \ Users \ User \ Documents \ MultiPlatformTodo \ web \ web '@ ./output.js 340: 62-89

ОШИБКА в ./output.js Модуль не найден: Ошибка: Невозможно разрешить «kotlinx-coroutines-core» в «C: \ Users \ Пользователь \ 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

FAILURE: сборка не удалась с исключением.

  • Что пошло не так: выполнение задачи не выполнено':веб-сайт: WebPack-расслоение.Ошибка узла 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"
    }
}

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Я знаю, что уже немного поздно, но если вы добавите apply plugin: 'kotlin-dce-js' в build.gradle, вы можете идти

0 голосов
/ 02 декабря 2018

Я вижу две вероятные проблемы.

Во-первых, вместо kotlin2js вы должны использовать многоплатформенные подключаемые модули Gradle, т.е. kotlin-multiplatform, который новее и будет иметь более долгосрочную поддержку, или kotlin-platform-js, что, вероятно, является более простой заменой для текущей настройки.

Другая проблема - строка implementation project(':common').Это говорит Gradle, что вы потребляете общий модуль как зависимость js, так как это проект js.Для kotlin-platform-js вместо этого следует использовать expectedBy project(':common'), чтобы связать его как общую зависимость.Для kotlin-multiplatform есть еще несколько изменений, которые вам нужны в вашей конфигурации зависимостей.Вы можете увидеть некоторые детали здесь

...