gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:02:12 25 4
gpt4 key购买 nike

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

我做了什么:

  • 下载 firebase(npm install firebase)
  • 在其上运行 Dukat 以生成声明 (dukat firebase/app/dist/app/index.d.ts)。
  • 将生成的文件复制到我的 Kotlin JS 项目。

enter image description here

经过一些更改后,我的 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 来重现。

我已经尝试了很多东西:

  • 默认情况下,Dukat 会为 Kotlin 声明生成包名称。我试图删除它们,但这似乎对错误没有影响。
  • 我尝试直接从我的客户端导入 firebase (`require("firebase")),以确保它被捆绑,但这也没有成功。
  • 最后,我还尝试声明对另一个 npm 包的实现依赖性,并使用自制声明导入这个包,如 in the documentation 所述。 .这个很有魅力。
  • 错误也发生在运行 javascript 之前,因此它看起来像是运行时包的导入问题。

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

最佳答案

Dukat 仍处于试验阶段。使用手工 wrapper 。类似的东西:

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

关于typescript - Uncaught ReferenceError : firebase is not defined in Kotlin/JS project with Dukat generated declarations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69629323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com