質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.63%

【Firebase】Error: Cannot find the firebase namespace; を解消したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 540

Bo_Takuma

score 5

実現したい事

firebase deployをした後に、タイトルのエラーを解消したい。

→firebaseのauth機能を組み込み中、以下のエラーにはまりました。。( ;  ; )

エラー

npm install --save firebaseを実行後、

firebase deployを実行すると、以下のerrorが発生。

Error: Error occurred while parsing your function triggers.

Error: Cannot find the firebase namespace; be sure to include firebase-app.js before this library.
    at /Users/Desktop/socialapp/firebase_function/functions/node_modules/@firebase/auth/dist/auth.js:430:352
    at /Users/Desktop/socialapp/firebase_function/functions/node_modules/@firebase/auth/dist/auth.js:430:455
    at Object.<anonymous> (/Users/Desktop/socialapp/firebase_function/functions/node_modules/@firebase/auth/dist/auth.js:430:461)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
username@mbp-2 functions %

firebase namespaceが見つからないよ、と言われたので、
require付近で間違えたのかな、と思いコードを確認。

コードなど

index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = require('express')();

admin.initializeApp();

const firebaseConfig = {
    apiKey: "******************",
    authDomain: "******************",
    databaseURL: "******************",
    projectId: "******************",
    storageBucket: "******************",
    messagingSenderId: "******************",
    appId: "******************",
    measurementId: "******************"
  };



// ↓↓ require firebase ↓↓ 

const firebase = require('firebase');
firebase.initializeApp(firebaseConfig);

// ↑↑ require firebase終わり ↑↑ 


app.get('/screams',(req,res) => {
    admin
    .firestore()
    .collection('screams')
    .orderBy('createdAt','descs')
    .get()
     .then((data) => {
         let screams = [];
         data.forEach((doc) => {
             screams.push({
                 screamId: doc.id,
                 body: doc.data().body,
                 userHandle: doc.data().userHandle,
                 createdAt: doc.data().createdAt, 
             });
         });
         return res.json(screams);
     })
     .catch(err => console.error(err));
})


app.post('/scream',(req,res) => {
    const newScream = {
        body: req.body.body,
        userHandle: req.body.userHandle,
        createdAt: new Date().toISOString()
    };
    admin.firestore()
     .collection('screams')
     .add(newScream)
     .then(doc => {
         res.json({ message: `document ${doc.id} created successfully` });
     })
     .catch(err => {
         res.status(500).json({ error: ' somethihg went wrong '});
         console.error(err);
     });
});

// Signup route

app.post('/signup', (req,res)=> {
    const newUser = {
        email: req.body.email,
        password: req.body.password,
        confirmPassword: req.body.confirmPassword,
        handle: req.body.handle,
    };

    //Todo balidate data
    firebase
    .auth()
    .createUserWithEmailAndPassword(newUser.email,newUser.password)
    .then((data) => {
        return res.status(201).json({ message: `user ${data.user.uid} signed up successgfully` });
    })
    .catch((err) => {
        console.error(err);
        return res.status(500).json({ error: err.code });
    });
});

exports.api = functions.https.onRequest(app);

package.json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "express": "^4.17.1",
    "firebase": "^7.15.0",
    "firebase-admin": "^7.0.0",
    "firebase-functions": "^3.6.2"
  },
  "engines": {
    "node": "8"
  },
  "private": true
}

ディレクトリ構造

.
└── functions
    └── node_modules
        :
        ├── extend
        ├── fast-text-encoding
        ├── faye-websocket
        ├── finalhandler
        ├── firebase
        ├── firebase-admin
        ├── firebase-functions
        ├── form-data
        ├── forwarded
        :

試した事

① import * as firebase from 'firebase';をindex.jsの上部に書き換える。
→syntax errorでうまく読み込めず。

②個別に分解して以下のように実行

var firebase = require('firebase/app');
require('firebase/auth');
require('firebase/database');


Error:Cannot find the firebase namespace;が起きて、またもやうまく動きません。。

同じようにrequireしたfirebase-functionsfirebase-adminはうまく動きました。
const firebase = require('firebase')のみエラーでうまくrequireできません。( ;  ; )
この問題を解消するにはどこを修正すればいいのでしょうか?

このエラーを解決したいので、詳しい方教えてください。

開発環境

Node.js: v10.15.3
firebase : 7.15.0
firebase-admin: 7.0.0,
firebase-functions: 3.6.2

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

直接の原因が、firebaseとfirebase-admin,firebase-functionsの依存関係でした。
versionによっては依存関係がうまく成り立たないようです。

なので、以下を実行して問題を解決しました。

解決方法:firebaseを5.9.0にダウングレード

①npm insatall --save firebase@5.9.0を実行(依存関係の解消)
②require('firebase');を任意のjsに記述&save
③firebase deploy を実行

Deploy complete!

auth functionもworking!!。

参考ソース
https://github.com/firebase/firebase-tools/issues/609

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る