Ошибка «Не удается найти имя« ServiceWorkerRegistration »» при создании облачной функции Firebase с использованием Typescript - PullRequest
0 голосов
/ 28 июня 2018

Я получаю следующую ошибку (фото ниже) при развертывании своей облачной функции с установленным модулем firebase. Error when trying to deploy my cloud functions

Я попытался установить @types/firebase и firebase и получил ту же ошибку. Я почти уверен, что эта ошибка как-то связана с этим модулем, потому что, когда firebase и @types/firebase удалены, функция развертывается правильно.

Кроме того, облачные функции еще не вызывают этот модуль, поэтому я не думаю, что ошибка в функции. Я предоставил код для моего package.json файла и ts.config файла. Любая идея, почему я получаю эту ошибку и как я могу импортировать модули без этой ошибки? Дайте мне знать, если есть еще один файл, который стоит рассмотреть. Спасибо.

. / 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"
  ]
}

Ответы [ 3 ]

0 голосов
/ 11 июля 2018

Если вам, как и мне, вам действительно нужно использовать клиентский модуль firebase внутри облачной функции, проблема, наряду с обходным решением, описана в # 880 :

Обходной путь - добавить "dom" к опции компилятора "lib" в вашем tsconfig.json

Наши пакеты предполагают, что существуют типы DOM. Проблема в том, что при импорте firebase/app импортируются наборы всех пакетов.

Некоторые из наших пакетов (например, Messaging) работают только в браузере. Эти пакеты (или их типы) не должны импортироваться в среде Node.

Изменить: вот более безопасный ответ, который был опубликован в ветке выпуска

Предлагаемый / продвигаемый обходной путь добавления «dom» в compilerOptions.lib НЕ является безопасным. Это говорит компилятору, что в моем коде допустимы все ссылки на типы dom, что явно не так, поскольку Node.js не является средой браузера. Если эта библиотека предназначена для использования в качестве библиотеки TypeScript Node.js, то она не должна зависеть от определений окружения, специфичных для dom. Более безопасный обходной путь для пользователей TypeScript 3.0 - импортировать базу данных огня следующим образом:

/// <reference lib="dom" />
import * as firebase from 'firebase';

Эта первая строка является «директивой lib тройного слэша» (https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html), впервые доступной в TypeScript 3.0. Это похоже на добавление dom в compilerOptions.lib, но только для этого одного файла. Обратите внимание, что директива тройного слэша должен появляться перед любыми утверждениями, иначе он будет интерпретирован как обычный комментарий.

0 голосов
/ 18 сентября 2018

Я сталкивался с этой проблемой несколько раз в прошлом. Вы можете попробовать добавить следующее в ваш файл tsconfig.json:

tsconfig.json:

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

Итак, ваш полный файл tsconfig.json должен выглядеть следующим образом:

{
  "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"
  ]
}
0 голосов
/ 30 июня 2018

Комментарий Майкла верен, поэтому отметьте это как ответ. Я использовал firebase, но должен был использовать firebase-admin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...