在一个基本的 kotlin js 项目中,我导入了firebase依赖项。我使用Dukat来访问类型引用并让它们编译。我的 kotlin 编译起来就像一个魅力,但在我看来,由 webpack 创建的包最终不包含 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 功能)。
我的客户在这里。您可以通过./gradlew run
在 sample-firebase 模块中运行来重现。
我已经尝试了很多东西:
- 默认情况下,Dukat 为 Kotlin 声明生成包名称。我试图删除它们,但这似乎对错误没有影响。
- 我试图从我的客户端(`require(“firebase”))直接导入firebase,以确保它被捆绑,但这也没有成功。
- 最后,我还尝试向另一个 npm 包声明一个实现依赖项,并使用文档中描述的自制声明导入这个。这个工作就像一个魅力。
- 该错误也会在运行 javascript 之前发生,因此它看起来像是运行时包的导入问题。
有什么方法可以找到我编译的 Kotlin 声明之间的差异,并且不会抛出错误,而我的前端只是无法导入 firebase?