pab*_*blo 5 firebase reactjs firebase-hosting
我正在开发一个使用“ create react app”(https://github.com/facebookincubator/create-react-app)创建的React应用。它将托管在Firebase托管中,我将按照文档(https://firebase.google.com/docs/web/setup#sdk_imports_and_implicit_initialization)中的说明使用隐式初始化,以部署到多个项目(我有一个开发人员项目和几个生产项目)
<script src="/__/firebase/init.js"></script>
Run Code Online (Sandbox Code Playgroud)
我需要在我的React组件的上面的脚本中初始化“ firebase”对象。如何将其导入多个React组件文件中?我知道只有在开发过程中以及在部署过程中将其与“ firebase服务”一起使用时,此功能才可用,因此在开发过程中,我尝试添加
<script src="https://www.gstatic.com/firebasejs/4.1.1/firebase.js"></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>
Run Code Online (Sandbox Code Playgroud)
如Firebase文档中所述将代码编码到我的index.html文件中。但是,当我尝试在ReactComponent中导入Firebase时,找不到它或抱怨未初始化项目(我在html标记中所做的事情)
如何从html脚本标签导入Firebase初始化的App和Firebase库?
当您使用 create-react app 和 webpack 时,您应该已经在使用 nodejs firebase:
npm install --save firebase
Run Code Online (Sandbox Code Playgroud)
要在部署时即时获取配置,您必须访问此 url:
/__/firebase/init.json
Run Code Online (Sandbox Code Playgroud)
因此,在尝试初始化 firebase 之前,您需要进行异步调用以获取存储在此位置的 json 对象。所以这里有一些示例代码(使用 axios 进行异步调用)包含在你的 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));
Run Code Online (Sandbox Code Playgroud)
此外,为了使其更加简化(使用带有 npm start 的 dev firebase 配置,如果部署了,则可以即时获取 prod firebase 配置),您可以执行以下操作:
fbconfig.js:
if (process.env.NODE_ENV === "production") {
module.exports = require("./prod");
} else {
module.exports = require("./dev");
}
Run Code Online (Sandbox Code Playgroud)
开发.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;
Run Code Online (Sandbox Code Playgroud)
产品.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;
Run Code Online (Sandbox Code Playgroud)
最后在 index.js 中:
import getFirebaseConfig from "./fbconfig";
getFirebaseConfig.then(result => {
firebase.initializeApp(result);
...etc
)}
.catch(err => console.log(err));
Run Code Online (Sandbox Code Playgroud)
And*_*ets -1
尝试firebase通过 npm 安装包。然后,您可以通过导入来轻松地在任何 React 组件中的任何地方使用它
import firebase from 'firebase';
Run Code Online (Sandbox Code Playgroud)
您还可以在某个文件中导入 firebase,configureFirebase.js您可以在其中使用一些配置初始化 firebase 应用程序,然后导出配置的 firebase 实例并在任何组件中使用此实例
它会很有帮助:
import firebase from 'firebase'
const config = { /* COPY THE ACTUAL CONFIG FROM FIREBASE CONSOLE */
apiKey: "unreadablestuff",
authDomain: "your-domain-name.firebaseapp.com",
databaseURL: "https://your-domain-name.firebaseio.com",
storageBucket: "your-domain-name.appspot.com",
messagingSenderId: "123123123123"
};
const fire = firebase.initializeApp(config);
export default fire;
Run Code Online (Sandbox Code Playgroud)