微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未捕获的错误:找不到模块Kodein-DI-kodein-di

如何解决未捕获的错误:找不到模块Kodein-DI-kodein-di

我正在构建针对JVM,Windows,JS和MacOS的kotlin MPP库。

我的gradle文件对于JS来说是这样的

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/"
    }
}
"""
            )
    }
}

我在JS上使用的库的使用者使用来自我们的GitLab注册表中的npm安装软件包,并且可以正常工作。他们遇到的问题如下:

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>'
  ]
}

如何隐藏对JS客户的Kodein依赖?我对gradle依赖管理的工作方式的理解是,使用实现应该在编译和运行时添加依赖,但仅对您的模块有效,而对外部客户端无效。 这是因为我在Lib的非内部包和类中使用KodeIN吗?

解决方法

这是因为Kodein是Gradle(Maven)依赖项,在NPM注册表中未提供。 您生成的package.json仅具有Kotlin依赖性,而没有Kodein(并且您不能这样做,因为据我所知,NPM中没有Kodein)。

实际上,您需要将其与代码一起分发,否则,您将获得ReferenceError

例如,您可以将依赖项放入npm软件包中的node_modules目录中。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?