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 库。
我做了什么:
- 下载 Firebase (
npm install firebase
)
- 运行 Dukat 生成声明 (
dukat firebase/app/dist/app/index.d.ts
)。
- 将生成的文件复制到我的 Kotlin JS 项目中。
经过一些更改,我的 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 仍处于实验阶段。使用手工包装纸。类似的东西:
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)
}
在一个基本的 kotlin js 项目中,我导入了 firebase dependency. I used Dukat 以访问类型引用并让它们进行编译。我的 kotlin 编译得很好,但在我看来,webpack 创建的包最终不包含 firebase 库。
我做了什么:
- 下载 Firebase (
npm install firebase
) - 运行 Dukat 生成声明 (
dukat firebase/app/dist/app/index.d.ts
)。 - 将生成的文件复制到我的 Kotlin JS 项目中。
经过一些更改,我的 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 仍处于实验阶段。使用手工包装纸。类似的东西:
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)
}