首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未捕获的错误:找不到模块Kodein-DI-kodein-di

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

Stack Overflow用户
提问于 2020-10-28 09:32:21
回答 1查看 84关注 0票数 0

我正在构建一个kotlin MPP库,目标是JVM,Windows,JS和MacOS。

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

代码语言:javascript
复制
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安装了这个包,并且运行良好。他们遇到的问题如下:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2020-10-28 22:32:44

这是因为Kodein是Gradle (Maven)依赖,这不会出现在NPM注册表中。你生成的package.json只有Kotlin依赖,但没有Kodein (你不能,因为据我所知,NPM中没有Kodein )。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64565244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档