web-dev-qa-db-fra.com

Erreur "Impossible de trouver le nom 'ServiceWorkerRegistration'" lors de la création d'une fonction de cloud Firebase à l'aide de Typescript

Je reçois le message d'erreur suivant (photo ci-dessous) lorsque je déploie ma fonction cloud avec le module firebase installé.  Error when trying to deploy my cloud functions

J'ai essayé d'installer @types/firebase et firebase et je reçois la même erreur. Je suis à peu près sûr que cette erreur a quelque chose à voir avec ce module, car lorsque firebase et @types/firebase sont désinstallés, la fonction se déploie correctement. 

De plus, les fonctions de cloud n'appelant pas encore ce module, je ne pense donc pas que l'erreur réside dans la fonction. J'ai fourni le code pour mon fichier package.json et mon fichier ts.config. Une idée de la raison pour laquelle je reçois cette erreur et comment puis-je importer des modules sans obtenir cette erreur? Faites-moi savoir s'il y a un autre fichier qui mérite d'être examiné. Je vous remercie.

./package.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "./node_modules/.bin/tslint -p tslint.json",
    "serve": "firebase serve --only functions",
    "Shell": "firebase functions:Shell",
    "start": "npm run Shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log",
    "build": "./node_modules/.bin/tsc"
  },
  "dependencies": {
    "dom": "0.0.3",
    "expo-server-sdk": "^2.4.0",
    "firebase-admin": "~5.12.1",
    "firebase-functions": "^1.0.3",
    "TypeScript": "^2.9.2"
  },
  "devDependencies": {
    "eslint": "^4.12.0",
    "eslint-plugin-promise": "^3.6.0",
    "ts-loader": "^4.4.2"
  },
  "main": "lib/index.js",
  "private": true
}

./tsconfig.json

{
  "compilerOptions": {
    "lib": ["es6"],
    "module": "commonjs",
    "noImplicitReturns": true,
    "outDir": "lib",
    "sourceMap": true,
    "target": "es6",
    "allowJs": true,
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}
6
Deep

Le commentaire de Michael est correct, signalant ceci comme une réponse. J'utilisais firebase, mais j'aurais dû utiliser firebase-admin

0
Deep

Si, comme moi, vous devez réellement utiliser le module client Firebase dans une fonction cloud, le problème, ainsi qu'une solution de contournement, sont décrits dans # 880 :

Une solution consiste à ajouter "dom" à l'option de compilation "lib" dans votre tsconfig.json.

Nos packages supposent que les types DOM existent. Le problème est que l'importation firebase/app importe les typages de tous les packages.

Certains de nos packages (comme la messagerie) ne fonctionnent que dans le navigateur. Ces packages (ou leurs types) ne doivent pas être importés dans un environnement de nœud.

8
weevilgenius

J'ai rencontré ce problème plusieurs fois dans le passé. Vous pouvez essayer d’ajouter ce qui suit à votre tsconfig.json:

tsconfig.json:

  "files": [
    "node_modules/TypeScript/lib/lib.es6.d.ts"
  ],
  "exclude": [
    "node_modules"
  ]

Donc, votre tsconfig.json complet devrait ressembler à ceci:

{
  "compilerOptions": {
    "lib": ["es6"],
    "module": "commonjs",
    "noImplicitReturns": true,
    "outDir": "lib",
    "sourceMap": true,
    "target": "es6"
  },
  "compileOnSave": true,
  "include": [
    "src"
  ],
  "files": [
    "node_modules/TypeScript/lib/lib.es6.d.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}
4
Christian Wheeler