Uncaught ReferenceError: firebase is not defined in Kotlin/JS project with Dukat generated declarations

Uncaught ReferenceError: firebase is not defined in Kotlin/JS project with Dukat generated declarations

在一个基本的 kotlin js 项目中,我导入了 firebase dependency. I used Dukat 以访问类型引用并让它们进行编译。我的 kotlin 编译得很好,但在我看来,webpack 创建的包最终不包含 firebase 库。

我做了什么:

经过一些更改,我的 Kotlin 编译正常。但是,当 运行 它时,我在前端面临 Uncaught ReferenceError: firebase is not defined error 。此错误发生在调用使用 firebase 的代码之前,因此我认为问题出在某种程度上的捆绑。

这是我的堆栈跟踪:

sample-firebase.js:391 Uncaught Error: Cannot find module 'firebase'
    at webpackMissingModule (sample-firebase.js:3)
    at eval (sample-firebase.js:3)
    at eval (sample-firebase.js:8)
    at Object../kotlin-dce-dev/sample-firebase.js (sample-firebase.js:359)
    at __webpack_require__ (sample-firebase.js:388)
    at sample-firebase.js:1447
    at sample-firebase.js:1450
    at webpackUniversalModuleDefinition (sample-firebase.js:17)
    at sample-firebase.js:18
[webpack-dev-server] Module not found: Error: Package path . is not exported from package /Users/julien/Developer/kotlin-samples/sample-firebase/build/js/node_modules/firebase (see exports field in /Users/julien/Developer/kotlin-samples/sample-firebase/build/js/node_modules/firebase/package.json)

这是我的客户端代码(唯一真正有趣的行是包含 initializeApp.

的那一行
fun main() {
    val firebaseConfig: Json = json(...)

    val fire = initializeApp(firebaseConfig)
    console.log(fire)
    window.onload = {
        console.log(sorted(arrayOf(1, 2, 3)))
        startFirebase();
        document.body?.sayHello() } }

注释掉 firebase 相关代码完全消除了错误(但显然也没有添加 firebase 功能)。

我的客户有空 here。您可以在 sample-firebase 模块中通过 运行 ./gradlew run 进行重现。

我已经尝试了很多东西:

有什么方法可以找到我的 Kotlin 声明编译但不抛出错误与我的前端无法导入 firebase 之间的差异?

Dukat 仍处于实验阶段。使用手工包装纸。类似的东西:

external interface FirebaseOptions{
}

external interface FirebaseAppSettings{
    var setting: String  // needed settings
}

external interface FirebaseApp{
}

@JsModule("firebase/app")
@JsNonModule
external val firebaseModule: dynamic

val initializeApp: (options: FirebaseOptions, config: FirebaseAppSettings) -> FirebaseApp = firebaseModule.initializeApp

添加到 build.gradle:

implementation(npm("firebase", "9.1.3"))

并使用它:

fun main() {
    val options: dynamic = object {}
    val config: dynamic = object {}
    config["setting"] = "xxx"
    val firebaseApp = initializeApp(
        options.unsafeCast<FirebaseOptions>(),
        config.unsafeCast<FirebaseAppSettings>()
    )
    console.log(firebaseApp)
}