Включение @ firebase / app в пакет функций firebase. json - PullRequest
1 голос
/ 08 января 2020

После обновления до новейшего пакета Firebase SDK и инструментов

npm install firebase-functions@latest firebase-admin@latest --save
npm install -g firebase-tools

я начал получать следующую ошибку при попытке развернуть мои функции Firebase:

TypeError: instance.INTERNAL.registerComponent is not a function
    at registerDatabase (/Users/jr/projects/docavea/functions/node_modules/@firebase/database/dist/index.node.cjs.js:15168:39)
    at Object.<anonymous> (/Users/jr/projects/docavea/functions/node_modules/@firebase/database/dist/index.node.cjs.js:15200:5)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at FirebaseNamespace.get [as database] (/Users/jr/projects/docavea/functions/node_modules/firebase-admin/lib/firebase-namespace.js:282:38)

Я нашел сообщения в https://github.com/firebase/firebase-admin-node/issues/714 и https://github.com/firebase/firebase-admin-node/issues/717 и https://twitter.com/plane1113/status/1203009025232654336, которые предлагают различные решения для этой проблемы, но ни один из них не работал для меня, за исключением включения @ firebase / приложение. Некоторые предположили, что это было вызвано наличием @ firebase / app где-то в моем проекте, но когда я запустил npm ls @firebase/app, я получил

    functions@ /Users/jr/projects/docavea/functions

└── (empty)

Так что мой вопрос: что такое @ firebase / app и проблема ли это чтобы включить его в мой пакет функций firebase. json

{
    "name": "functions",
    "scripts": {
        "lint": "tslint --project tsconfig.json",
        "build": "tsc",
        "serve": "npm run build && firebase serve --only functions",
        "shell": "npm run build && firebase functions:shell",
        "start": "npm run shell",
        "deploy": "firebase deploy --only functions",
        "logs": "firebase functions:log"
    },
    "main": "lib/src/index.js",
    "dependencies": {
        "@firebase/app": "^0.5.0",
        "@sendgrid/mail": "^6.4.0",
        "cors": "^2.8.5",
        "firebase-admin": "^8.9.0",
        "firebase-functions": "^3.3.0",
        "lodash": "^4.17.15",
        "mailchimp-api-v3": "^1.13.1"
    },
    "peerDependencies": {
        "@google-cloud/firestore": "^3.3.2"
    },
    "engines": {
        "node": "8"
    },
    "devDependencies": {
        "tslint": "^5.20.1",
        "typescript": "^3.7.4"
    },
    "private": true
}

Ответы [ 2 ]

1 голос
/ 09 января 2020

Во-первых, чтобы ответить на вопрос @firebase/app - это модуль, который является частью Firebase Web SDK (вы получаете его по npm install firebase), и его никогда не нужно устанавливать вручную, и его вообще не нужно устанавливать для * 1003. *.

Итак, в общем, вот что происходит с этой ошибкой, в общем: firebase-admin имеет зависимость под названием @firebase/database, которая используется совместно с Firebase Web SDK. В недавнем выпуске @firebase/database были некоторые изменения, из-за которых он не работал, если использовался со старой версией @firebase/app.

Таким образом, в принципе, он должен работать, если у вас есть (1) нет @firebase/app или (2) ток @firebase/app. Похоже, что ваша ошибка, скорее всего, устаревшая @firebase/app.

Я знаю, что вы сказали, что в вашем проекте, похоже, нет @firebase/app, но так как это кажется наиболее вероятной причиной, я интересно, если у вас есть в родительском каталоге. (Он устанавливается как часть Firebase Web SDK, как в npm install firebase.) Большинство функций firebase (если вы используете firebase init) настраиваются в подкаталоге /functions основного репозитория проекта с собственным пакетом. json, а остальная часть проекта на один уровень выше и имеет другой пакет. json. И похоже, что это может быть ваша структура dir?

В этом случае выполнение npm ls внутри /functions приведет к пустому результату, но если вы go до родительского dir (который содержит другой пакет. json), он появится. Узел повысит уровень go, если не найдет пакет в текущем. Посмотрите, можете ли вы убедиться, что оба уровня чисты от любого @firebase/app, удалите обе директории node_modules, переустановите. Если он вам нужен на верхнем уровне (для Firebase Web SDK), убедитесь, что он обновлен до самой последней версии firebase (7.6.1).

В качестве крайней меры, возможно, проверьте, если firebase как-то установлено npm глобально.

Если у вас определенно нет @firebase/app на каком-либо уровне вашего проекта, и он все еще не работает, это ошибка, на которую мы должны обратить внимание.

Извините, это очень много информации! Надеюсь, это было не так уж и много. TLDR: я думаю, что у тебя, вероятно, есть @ firebase / app в твоем проекте root dir? Если нет, пожалуйста, сообщите о проблеме на Github.

0 голосов
/ 09 января 2020

На основании ответа @Christina Holland я немного углубился в изучение. Когда я запустил npm ls @firebase/app в своей папке Angular (функции - это подпапка этого), я получил:

    └─┬ UNMET PEER DEPENDENCY firebase@7.6.1
      └── @firebase/app@0.5.0
npm ERR! peer dep missing: firebase@>= 5.5.7 <7, required by @angular/fire@5.2.1

Затем я обновил @ angular / fire до последней версии. Это не изменило версию @ firebase / app, но удалило ошибку:

└─┬ firebase@7.6.1
  └── @firebase/app@0.5.0

После этого я мог удалить @ firebase / app из моего пакета функций. json, и я мог развернуть его без любые ошибки.

Я не понимаю, что здесь происходит, но проблема решена, и, возможно, она может помочь другому разработчику с этой проблемой.

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