网站搜索

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";