Ошибка сборки модуля JS в многоплатформенном проекте Kotlin

Сбой сборки с сообщениями об ошибках:

ОШИБКА в ./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-react' в 'C: \ Users \ User \ Documents \ MultiPlatformTodo \ web \ web' @ ./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"
    }
}

person Edson Menegatti    schedule 02.12.2018    source источник
comment
Также опубликуйте содержимое common сценария сборки проекта.   -  person Ilya    schedule 02.12.2018
comment
@Ilya только что обновил вопрос проектом common   -  person Edson Menegatti    schedule 03.12.2018
comment
@EdsonMenegatti Есть шанс, что ты сможешь решить эту проблему.   -  person Kapil G    schedule 26.09.2019


Ответы (2)


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

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

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

person RussHWolf    schedule 02.12.2018
comment
Модуль js, о котором я упоминал здесь, не является библиотекой js, а скорее обычным модулем js, который использует библиотеку common. Плагин kotlin2js необходим для преобразования содержащегося в нем кода kotlin в js, чтобы его можно было восстановить в html-файле. - person Edson Menegatti; 02.12.2018

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

person andylamax    schedule 24.01.2019