我正在尝试最新的Firebase npm模块(4.8.1
)。我正在使用带有 webpack 捆绑的 commonjs 模块系统。为了确保我得到我需要的打字,我的package.json
中有以下内容:
"dependencies: {
"firebase": "^4.8.1"
},
"devDependencies": {
"@firebase/app": "^0.1.5",
"@firebase/app-types": "^0.1.0",
"@firebase/auth": "^0.3.1",
"@firebase/auth-types": "^0.1.0",
"@firebase/database": "^0.1.6",
"@firebase/database-types": "0.1.0",
}
当我用tsc
转译时,出现以下错误:
node_modules/@firebase/database/dist/esm/src/api/Database.d.ts(4,33):错误 TS2307:找不到模块"@firebase/app-types/private"。
node_modules/@firebase/database/dist/esm/src/core/AuthTokenProvider.d.ts(17,39):错误 TS2307:找不到模块"@firebase/应用程序类型/private"。
我觉得这很奇怪,原因有几个:
- 我使用的是CommonJS模块系统而不是ESM
- 我假设
@firebase/data-types
是用来提供类型而不是实现代码的。这就是为什么我将其列为devDependency而不是依赖项的原因 - 即使我将所有
@firebase/*
切换到"依赖项",它仍然会给出相同的错误 - 我确实看到其他人在这里发帖说 Firebase 4.8.1 中有一个错误,回滚到 4.8.0 可能会解决问题......但据我所知,4.8.0 有各种"隐含的任何"错误(也许我可以证明关闭这些错误是合理的),但在导出的 API 中还有许多其他弃用。简而言之,在我看来,4.8.1 作为打字参考要好得多。
使用以下tsconfig.json
它对我来说效果很好:
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"moduleResolution": "node",
"inlineSourceMap": true
}
}
在src/index.ts
中,我只是像这样导入:
// This import loads the firebase namespace along with all its type information.
import * as firebase from 'firebase';
const firebaseApp = firebase.initializeApp({
apiKey: '<your-api-key>',
authDomain: '<your-auth-domain>',
databaseURL: '<your-database-url>',
storageBucket: '<your-storage-bucket>',
messagingSenderId: '<your-sender-id>'
});
在我修改tsconfig.json
之前,我遇到了类似的问题:
{
...
"devDependencies": {
...
},
"dependencies": {
...,
"firebase": "^4.8.1"
}
}
我希望这有所帮助!