У меня проблема с подключением модуля. У меня есть модуль веб-приложения (js) и mpp-библиотека (мультиплатформенная) с модулем домена (мультиплатформенная). Пример, браузер выбрасывает ошибка , когда я использую некоторый класс из домена в модуле веб-приложения
структура проекта:
web-app
│ build.gradle.kts
│
├───package.json.d
│ project.info.json
│
├───public
│ index.html
│
├───src
│ └───main
│ ├───kotlin
│ │ └───com.some.webapp
│ │ JsApp.kt
│ │
│ └───resources
└───webpack.config.d
babel.js
css.js
html.js
minify.js
sourcemap.js
mpp-library
│ build.gradle.kts
│
└───domain
│ build.gradle.kts
│
│
└───src
│ openapi.yaml
│
├───androidMain
│ │ AndroidManifest.xml
│ │
│ └───kotlin
│ SomeUser.kt
│
├───commonMain
│ └───kotlin
│ └───com
│ └───some
│ └───domain
│ │ Factory.kt
│ │
│ ├───di
│ ├───entity
│ │ Account.kt
│ │ User.kt
│ │
│ ├───model
│ └───repository
│ UserRepository.kt
│
├───jsMain
└───jvmMain
build.gradle.kts (web-app)
plugins {
id("kotlin2js")
kotlin("frontend")
}
kotlinFrontend {
downloadNodeJsVersion = "latest"
sourceMaps = false
npm {
replaceVersion("kotlinx-html-js", Versions.kotlin)
replaceVersion("kotlinx-html-shared", Versions.kotlin)
replaceVersion("kotlin-js-library", Versions.kotlin)
dependency("text-encoding")
devDependency("webpack", "4")
devDependency("babel-loader", "8")
devDependency("@babel/core")
devDependency("@babel/preset-env")
devDependency("css-loader")
devDependency("karma")
devDependency("style-loader")
devDependency("source-map-loader")
devDependency("html-loader")
}
sourceMaps = true
webpack {
publicPath = "/"
bundleName = "web-app"
contentPath = file("/public")
port = 8085
proxyUrl = "http://localhost:8080/"
sourceMapEnabled = true
stats = "errors-only"
}
}
dependencies {
implementation(Deps.Libs.Js.kotlinStdLib.name)
implementation(Deps.Libs.Js.kotlinHTML.name)
implementation(project(":mpp-library"))
}
tasks {
compileKotlin2Js {
kotlinOptions {
moduleKind = "commonjs"
main = "call"
}
}
}
fun org.jetbrains.kotlin.gradle.frontend.KotlinFrontendExtension.`webpack`(
configure: org.jetbrains.kotlin.gradle.frontend.webpack.WebPackExtension.() -> Unit
) {
bundle("webpack", delegateClosureOf(configure))
}
build.gradle.kts (: mpp-library: domain)
import util.MultiplatformPlugin
import util.mppLibrary
plugins {
id("com.android.library")
kotlin("multiplatform")
id("kotlinx-serialization")
}
apply<MultiplatformPlugin>()
android {
compileSdkVersion(Versions.Android.compileSdk)
defaultConfig {
minSdkVersion(Versions.Android.minSdk)
targetSdkVersion(Versions.Android.targetSdk)
}
}
dependencies {
mppLibrary(Deps.Libs.MultiPlatform.kotlinStdLib)
}
JsApp.kt
package com.some.webapp
import com.some.domain.entity.Account
import kotlinx.html.dom.append
import kotlinx.html.h1
import kotlinx.html.js.h2
import kotlin.browser.document
import kotlin.browser.window
fun main() {
window.onload = {
val account = Account(password = "123")
document.getElementById("app")?.append {
h1 { +"Test: ${account.password}" }
h2 { +"h2" }
}
}
}