Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 未捕获错误:找不到模块Kodein DI Kodein DI_Kotlin_Kotlin Multiplatform_Kotlin Js - Fatal编程技术网

Kotlin 未捕获错误:找不到模块Kodein DI Kodein DI

Kotlin 未捕获错误:找不到模块Kodein DI Kodein DI,kotlin,kotlin-multiplatform,kotlin-js,Kotlin,Kotlin Multiplatform,Kotlin Js,我正在构建一个针对JVM、Windows、JS和MacOS的kotlin MPP库 对于JS,我的gradle文件如下所示 kotlin { targets { jvm() js { browser { } nodejs { } } mingwX64("windows") { bina

我正在构建一个针对JVM、Windows、JS和MacOS的kotlin MPP库

对于JS,我的gradle文件如下所示

kotlin {
    targets {
        jvm()
        js {
            browser {
            }
            nodejs {
            }
        }

        mingwX64("windows") {
            binaries {
                sharedLib {
                    baseName = "lib"
                }
                staticLib {
                    baseName = "lib"
                }
            }
        }
        macosX64("macos") {
            binaries {
                sharedLib {
                    baseName = "lib"
                }
            }
        }
        sourceSets {
            commonMain {
                dependencies {
                    implementation(kotlin("stdlib-common"))
                    implementation("org.kodein.di:kodein-di:$kodeinVersion")
                }
            }
            commonTest {
                dependencies {
                    implementation(kotlin("test-common"))
                    implementation(kotlin("test-annotations-common"))
                    implementation("io.mockk:mockk-common:$mockkVersion")
                }
            }
            getByName("jvmMain").dependencies {
                implementation(kotlin("stdlib-jdk8"))
            }
            getByName("jvmTest").dependencies {
                implementation(kotlin("test"))
                implementation(kotlin("test-junit"))
                implementation("io.mockk:mockk:$mockkVersion")
            }
            getByName("jsMain").dependencies {
                implementation(kotlin("stdlib-js"))
            }
            getByName("jsTest").dependencies {
                implementation(kotlin("test-js"))
            }
            getByName("macosMain").dependencies {
            }
            getByName("macosTest").dependencies {
            }
            getByName("windowsMain").dependencies {
            }
            getByName("windowsTest").dependencies {
            }
        }
    }
    sourceSets {
        all {
            languageSettings.enableLanguageFeature("InlineClasses")
        }
    }
    configure(listOf(metadata(), jvm(), js(), macosX64("macos"), mingwX64("windows"))) {
        mavenPublication {
            val targetPublication = this@mavenPublication
            tasks.withType<AbstractPublishToMaven>()
                .matching { it.publication == targetPublication }
        }
    }
}

task("generateJsPackageJson") {
    doLast {
        File("$buildDir/js/packages/${project.name}/kotlin", "package.json")
            .writeText(
                """{
  "name": "@org/${project.name.toLowerCase()}",
  "version": "$version",
  "main": "${project.name}.js",
  "url": "https://gitlab.com/org/common/multiplatform/lib",
  "dependencies": {
    "kotlin": "^${kotlin.coreLibrariesVersion}"
  },
  "publishConfig": {
      "@org:registry":"https://gitlab.com/api/v4/projects/${System.getenv("CI_PROJECT_ID")}/packages/npm/"
    }
}
"""
            )
    }
}
kotlin{
目标{
jvm()
js{
浏览者{
}
nodejs{
}
}
mingwX64(“窗口”){
二进制文件{
共享数据库{
baseName=“lib”
}
静态库{
baseName=“lib”
}
}
}
macosX64(“macos”){
二进制文件{
共享数据库{
baseName=“lib”
}
}
}
源集{
普通人{
依赖关系{
实施(kotlin(“stdlib通用”))
实现(“org.kodein.di:kodein di:$kodeinVersion”)
}
}
普通测试{
依赖关系{
实现(kotlin(“测试通用”))
实现(kotlin(“测试注释通用”))
实现(“io.mockk:mockk-common:$mockkVersion”)
}
}
getByName(“jvmMain”).dependencies{
实施(kotlin(“stdlib-jdk8”))
}
getByName(“jvmTest”).依赖项{
实施(kotlin(“测试”))
实现(kotlin(“测试junit”))
实现(“io.mockk:mockk:$mockkVersion”)
}
getByName(“jsMain”).dependencies{
实施(kotlin(“stdlib js”))
}
getByName(“jsTest”).dependencies{
实现(kotlin(“测试js”))
}
getByName(“macosMain”).依赖项{
}
getByName(“macosTest”).依赖项{
}
getByName(“windowsMain”).dependencies{
}
getByName(“windowsTest”).依赖项{
}
}
}
源集{
全部{
languageSettings.enableLanguageFeature(“InlineClass”)
}
}
配置(列表(元数据()、jvm()、js()、macosX64(“macos”)、mingwX64(“windows”)){
mavenPublication{
val targetPublication=this@mavenPublication
tasks.withType()
.matching{it.publication==targetPublication}
}
}
}
任务(“generateJsPackageJson”){
多拉斯特{
文件(“$buildDir/js/packages/${project.name}/kotlin”,“package.json”)
.writeText(
"""{
“名称”:“@org/${project.name.toLowerCase()}”,
“版本”:“$version”,
“main”:“${project.name}.js”,
“url”:”https://gitlab.com/org/common/multiplatform/lib",
“依赖项”:{
“kotlin”:“^${kotlin.coreLibrariesVersion}”
},
“publishConfig”:{
“@org:registry”:”https://gitlab.com/api/v4/projects/${System.getenv(“CI_PROJECT_ID”)}/packages/npm/“
}
}
"""
)
}
}
JS上my library的使用者使用GitLab注册表中的npm安装包,tha工作正常。他们遇到的问题如下:

Uncaught Error: Cannot find module 'Kodein-DI-kodein-di'
Require stack:
- /tmp/test-lib/node_modules/@org/lib/Index.js
- <repl>
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
    at Function.Module._load (internal/modules/cjs/loader.js:841:27)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at /tmp/test-lib/node_modules/@org/lib/Index.js:5:48 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/tmp/test-lib/node_modules/@org/lib/Index.js',
    '<repl>'
  ]
}
未捕获错误:找不到模块'Kodein DI Kodein DI'
需要堆栈:
-/tmp/test lib/node_modules/@org/lib/Index.js
- 
位于Function.Module.\u resolveFilename(internal/modules/cjs/loader.js:965:15)
at Function.Module._load(内部/modules/cjs/loader.js:841:27)
at Module.require(内部/modules/cjs/loader.js:1025:19)
根据需要(内部/modules/cjs/helpers.js:72:18)
at/tmp/test lib/node_modules/@org/lib/Index.js:5:48{
代码:“未找到模块”,
requireStack:[
“/tmp/test lib/node_modules/@org/lib/Index.js”,
''
]
}
如何将对Kodein的依赖关系隐藏到JS客户端?我对gradle依赖关系管理工作原理的理解是,使用实现应该在编译和运行时添加依赖关系,但只针对您的模块,而不针对其外部客户端。
发生这种情况是因为我在库的非内部包和类中使用了KodeIN吗?

这是因为KodeIN是Gradle(Maven)依赖项,在NPM注册表中没有显示。 您生成的
package.json
只有Kotlin依赖项,但没有Kodein(您不能这样做,因为我知道,NPM中没有Kodein)

事实上,您需要将其与您的代码一起分发,因为否则,您将得到这样的
ReferenceError

例如,您可以将依赖项放入npm包中的
node\u模块中


现在我们正在开发基于封闭世界模型的Kotlin/JS IR编译器,它将生成绑定了所有Kotlin库的JavaScript文件(但有可能在这种情况下共享一些库)。您可以在您的项目中尝试它(如果您的依赖项有IR变体)

谢谢@ilya,您所说的有道理,但也证实了我对Kotlin MPP瞄准JS的担忧。您可以详细介绍一下
吗?例如,您可以将依赖项放入npm包中的node_modules dir中。