TypeScript 找不到已安装的 firebase 包
我有一个简单的 TypeScript 项目,其中有一堆 .ts 文件,我想将它们编译成 .js 文件以在其他项目中使用。
在一个文件中我需要使用 firebase 包,但似乎找不到该包。它已经安装并位于 node_modules 文件夹中。当我做以下操作时:
运行 import firebase from 'firebase'; 并执行 tsc 时,我得到
lib/api.ts:2:22 - error TS2307: Cannot find module 'firebase'.
2 import firebase from 'firebase';
~~~~~~~~~~
Found 1 error.
我尝试删除了 node_modules 文件夹和 package-lock.json,并执行了 npm uninstall firebase,但似乎没有任何效果。
我的 package.json:
{
"name": "project-models",
"version": "1.0.1",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"private": true,
"scripts": {
"build": "tsc",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Jonas Wallmann",
"license": "ISC",
"dependencies": {
"firebase": "^6.2.3"
},
"devDependencies": {
"typescript": "^3.5.2"
}
}
我的 tsconfig.json:
{
"compilerOptions": {
"target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"declaration": true, /* Generates corresponding '.d.ts' file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"strict": false, /* Enable all strict type-checking options. */
"strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
}
}
有什么想法吗?
答案#1
也许类型定义文件没有包含在主要的 npm 包中。尝试在项目根目录运行 npm install @types/firebase --save-dev,然后再次尝试编译。
答案#2
我通过将 import 'firebase' 改为 import 'firebase/app' 解决了同样的错误。更多上下文请参见这里。
它修复了导入错误,但问题还没有完全解决——TypeScript 现在抱怨 firebase.auth() 是错误的,因为 firebase 没有 auth 方法。我在 [这里] 找到了解决方案:
import firebase from "firebase/compat/app";
import "firebase/compat/auth";
