我正在开发一个使用“create react app”( https://github.com/facebookincubator/create-react-app)创建的React应用程序. 它将托管在Firebase Hosting中,我想使用文档( https://firebase.google.com/docs/web/setup#sdk_impor
它将托管在Firebase Hosting中,我想使用文档( https://firebase.google.com/docs/web/setup#sdk_imports_and_implicit_initialization)中描述的隐式初始化来部署到多个项目(我有一个开发项目和几个生产项目)
<script src="/__/firebase/init.js"></script>
我需要在我的React组件中的上面脚本中初始化“firebase”对象.我应该如何在多个React组件文件中导入它?
我知道只有当我在开发期间和部署它时使用“firebase serve”服务它时才能使用它,因此在开发过程中我试图添加
<script src="http://img.558idc.com/uploadfile/allimg/210615/19205AB3-1.jpg"></script> <script> // Initialize Firebase // TODO: Replace with your project's customized code snippet var config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", databaseURL: "https://<DATABASE_NAME>.firebaseio.com", storageBucket: "<BUCKET>.appspot.com", messagingSenderId: "<SENDER_ID>", }; firebase.initializeApp(config); </script>
代码到我的index.html文件,如Firebase文档中所述.但是,当我尝试在ReactComponent中导入Firebase时,它找不到它或抱怨没有初始化项目(我在html标签中做了什么)
如何从我的html脚本标记导入Firebase初始化的App和Firebase库?
当您使用create-react应用程序并因此使用webpack时,您应该已经在使用nodejs firebase:npm install --save firebase
要在部署时动态获取配置,您必须访问此URL:
/__/firebase/init.json
因此,在尝试初始化firebase之前,需要进行异步调用以将json对象存储在此位置.所以这里有一些示例代码(使用axios for async call)包含在index.js中:
import React from "react"; import ReactDOM from "react-dom"; import * as firebase from "firebase/app"; import axios from "axios"; const getFirebaseConfig = new Promise((resolve, reject) => { axios .get(`/__/firebase/init.json`) .then(res => { resolve(res.data); }) .catch(err => reject(err)); }); getFirebaseConfig .then(result => { firebase.initializeApp(result); ReactDOM.render( <div>XXXXX</div>, document.getElementById("root") ); }) .catch(err => console.log(err));
另外为了使这更加简化(使用dev firebase配置,使用npm start,并在部署时动态获取prod firebase配置),您可以执行以下操作:
fbconfig.js:
if (process.env.NODE_ENV === "production") { module.exports = require("./prod"); } else { module.exports = require("./dev"); }
dev.js:
const firebaseConfig = { // your dev firebase configuration apiKey: "xxxxx", authDomain: "xxxxx", databaseURL: "xxxxxx", projectId: "xxxxxx", storageBucket: "xxxxx", messagingSenderId: "xxxxx" }; const getFirebaseConfig = new Promise((resolve, reject) => { resolve(firebaseConfig); }); export default getFirebaseConfig;
prod.js:
import axios from "axios"; const getFirebaseConfig = new Promise((resolve, reject) => { axios .get(`/__/firebase/init.json`) .then(res => { resolve(res.data); }) .catch(err => reject(err)); }); export default getFirebaseConfig;
最后在index.js中:
import getFirebaseConfig from "./fbconfig"; getFirebaseConfig.then(result => { firebase.initializeApp(result); ...etc )} .catch(err => console.log(err));