Firebase 多个 "apps" - 客户端和服务器端
Firebase multiple "apps" - client side and server side
所以,我想在项目中添加另一个 firebase 应用程序。我已经有一个用于 SSR (firebase-admin),因此服务器可以预渲染网站。现在我想添加 firebase@8,这样我就可以开始在客户端使用它,然后再对其应用 firestore 规则。问题是,当我尝试使用它时出现此错误:
/node_modules/@google-cloud/storage/build/src/bucket.js:22:0
Module not found: Can't resolve 'fs'
Import trace for requested module:
./node_modules/@google-cloud/storage/build/src/index.js
./node_modules/firebase-admin/lib/storage/storage.js
./node_modules/firebase-admin/lib/app/firebase-namespace.js
./node_modules/firebase-admin/lib/default-namespace.js
./node_modules/firebase-admin/lib/index.js
./firebase/config.js
./firebase/createDocument.js
./components/form/Form.js
./pages/opinia/index.js
https://nextjs.org/docs/messages/module-not-found
这是我的配置文件:
import * as admin from 'firebase-admin';
import firebase from 'firebase';
import 'firebase/firestore';
// initialize firebase on CLIENT
const firebaseConfig = {
apiKey: process.env.FIREBASE_KEY,
authDomain: process.env.FIREBASE_DOMAIN,
projectId: process.env.FIREBASE_ID,
storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.APP_ID,
};
export const clientApp = initializeApp(firebaseConfig);
// firestore
export const projectFirestoreClient = firebase.firestore(clientApp);
// timestamp
export const timestampClient = firebase.firestore.Timestamp;
// initialize firebase on SERVER
if (!admin.apps.length) {
const serviceAccount = require('./firebase-adminsdk.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
}
// firestore
export const projectFirestoreAdmin = admin.firestore();
// timestamp
export const timestampAdmin = admin.firestore.Timestamp;
所以,我的问题是,我该如何解决这个错误?是什么原因造成的?提前致谢。
Firebase Admin 不适用于客户端。当您 运行 应用程序时,Firebase Admin 也会被导入并导致该错误。理想情况下,您应该在另一个只能在服务器端访问的文件中初始化 Firebase Admin。
查看 this blog 以了解有关如何将 Firebase Admin 与 NextJS 结合使用的分步说明。
所以,我想在项目中添加另一个 firebase 应用程序。我已经有一个用于 SSR (firebase-admin),因此服务器可以预渲染网站。现在我想添加 firebase@8,这样我就可以开始在客户端使用它,然后再对其应用 firestore 规则。问题是,当我尝试使用它时出现此错误:
/node_modules/@google-cloud/storage/build/src/bucket.js:22:0
Module not found: Can't resolve 'fs'
Import trace for requested module:
./node_modules/@google-cloud/storage/build/src/index.js
./node_modules/firebase-admin/lib/storage/storage.js
./node_modules/firebase-admin/lib/app/firebase-namespace.js
./node_modules/firebase-admin/lib/default-namespace.js
./node_modules/firebase-admin/lib/index.js
./firebase/config.js
./firebase/createDocument.js
./components/form/Form.js
./pages/opinia/index.js
https://nextjs.org/docs/messages/module-not-found
这是我的配置文件:
import * as admin from 'firebase-admin';
import firebase from 'firebase';
import 'firebase/firestore';
// initialize firebase on CLIENT
const firebaseConfig = {
apiKey: process.env.FIREBASE_KEY,
authDomain: process.env.FIREBASE_DOMAIN,
projectId: process.env.FIREBASE_ID,
storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.APP_ID,
};
export const clientApp = initializeApp(firebaseConfig);
// firestore
export const projectFirestoreClient = firebase.firestore(clientApp);
// timestamp
export const timestampClient = firebase.firestore.Timestamp;
// initialize firebase on SERVER
if (!admin.apps.length) {
const serviceAccount = require('./firebase-adminsdk.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
}
// firestore
export const projectFirestoreAdmin = admin.firestore();
// timestamp
export const timestampAdmin = admin.firestore.Timestamp;
所以,我的问题是,我该如何解决这个错误?是什么原因造成的?提前致谢。
Firebase Admin 不适用于客户端。当您 运行 应用程序时,Firebase Admin 也会被导入并导致该错误。理想情况下,您应该在另一个只能在服务器端访问的文件中初始化 Firebase Admin。
查看 this blog 以了解有关如何将 Firebase Admin 与 NextJS 结合使用的分步说明。