Reputation: 1
Module not found: Package path . is not exported from package /home/kapil/web/facebook-clone/node_modules/firebase (see exports field in /home/kapil/web/facebook-clone/node_modules/firebase/package.json) 5 | import { useRef, useState } from "react"; 6 | import { db, storage } from "../firebase";
7 | import firebase from "firebase"; 8 | 9 | function InputBox() { 10 | const [session] = useSession();
this is error i have install firebase many time and also runs npm install for all dependency
this is my firebase package.json file code
{
"_from": "firebase@^9.0.0",
"_id": "[email protected]",
"_inBundle": false,
"_integrity": "sha512-RMpbXsVlxqMX+s/gYudnUZeSZXPiLCJMdaxbZ0WRiMjLuJc6ZkbpRy7yz7rZQpL0wRD6gN4K5C+JaKEQtN3jAQ==",
"_location": "/firebase",
"_phantomChildren": {},
"_requested": {
"type": "range",
"registry": true,
"raw": "firebase@^9.0.0",
"name": "firebase",
"escapedName": "firebase",
"rawSpec": "^9.0.0",
"saveSpec": null,
"fetchSpec": "^9.0.0"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/firebase/-/firebase-9.0.1.tgz",
"_shasum": "6bc5f9d7bdcd864ef98f2219fa0cd240f2e48b3c",
"_spec": "firebase@^9.0.0",
"_where": "/home/kapil/web/facebook-clone",
"author": {
"name": "Firebase",
"email": "[email protected]",
"url": "https://firebase.google.com/"
},
"bugs": {
"url": "https://github.com/firebase/firebase-js-sdk/issues"
},
"bundleDependencies": false,
"components": [
"analytics",
"app",
"app-check",
"auth",
"auth/cordova",
"auth/react-native",
"functions",
"firestore",
"firestore/lite",
"storage",
"performance",
"remote-config",
"messaging",
"messaging/sw",
"database"
],
"dependencies": {
"@firebase/analytics": "0.7.0",
"@firebase/analytics-compat": "0.1.1",
"@firebase/app": "0.7.0",
"@firebase/app-check": "0.4.0",
"@firebase/app-check-compat": "0.1.1",
"@firebase/app-compat": "0.1.1",
"@firebase/app-types": "0.7.0",
"@firebase/auth": "0.17.1",
"@firebase/auth-compat": "0.1.1",
"@firebase/database": "0.12.0",
"@firebase/database-compat": "0.1.0",
"@firebase/firestore": "3.0.1",
"@firebase/firestore-compat": "0.1.1",
"@firebase/functions": "0.7.0",
"@firebase/functions-compat": "0.1.1",
"@firebase/installations": "0.5.0",
"@firebase/messaging": "0.9.0",
"@firebase/messaging-compat": "0.1.0",
"@firebase/performance": "0.5.0",
"@firebase/performance-compat": "0.1.0",
"@firebase/polyfill": "0.3.36",
"@firebase/remote-config": "0.2.0",
"@firebase/remote-config-compat": "0.1.0",
"@firebase/storage": "0.8.1",
"@firebase/storage-compat": "0.1.1",
"@firebase/util": "1.3.0"
},
"deprecated": false,
"description": "Firebase JavaScript library for web and Node.js",
"devDependencies": {
"@rollup/plugin-commonjs": "17.1.0",
"@rollup/plugin-node-resolve": "11.2.0",
"gulp": "4.0.2",
"gulp-replace": "1.1.3",
"gulp-sourcemaps": "3.0.0",
"rollup": "2.52.2",
"rollup-plugin-license": "2.5.0",
"rollup-plugin-sourcemaps": "0.6.3",
"rollup-plugin-terser": "7.0.2",
"rollup-plugin-typescript2": "0.30.0",
"rollup-plugin-uglify": "6.0.4",
"typescript": "4.2.2"
},
"exports": {
"./analytics": {
"node": {
"require": "./analytics/dist/index.cjs.js",
"import": "./analytics/dist/index.mjs"
},
"default": "./analytics/dist/index.esm.js"
},
"./app": {
"node": {
"require": "./app/dist/index.cjs.js",
"import": "./app/dist/index.mjs"
},
"default": "./app/dist/index.esm.js"
},
"./app-check": {
"node": {
"require": "./app-check/dist/index.cjs.js",
"import": "./app-check/dist/index.mjs"
},
"default": "./app-check/dist/index.esm.js"
},
"./auth": {
"node": {
"require": "./auth/dist/index.cjs.js",
"import": "./auth/dist/index.mjs"
},
"default": "./auth/dist/index.esm.js"
},
"./auth/cordova": {
"node": {
"require": "./auth/cordova/dist/index.cjs.js",
"import": "./auth/cordova/dist/index.mjs"
},
"default": "./auth/cordova/dist/index.esm.js"
},
"./auth/react-native": {
"node": {
"require": "./auth/react-native/dist/index.cjs.js",
"import": "./auth/react-native/dist/index.mjs"
},
"default": "./auth/react-native/dist/index.esm.js"
},
"./database": {
"node": {
"require": "./database/dist/index.cjs.js",
"import": "./database/dist/index.mjs"
},
"default": "./database/dist/index.esm.js"
},
"./firestore": {
"node": {
"require": "./firestore/dist/index.cjs.js",
"import": "./firestore/dist/index.mjs"
},
"default": "./firestore/dist/index.esm.js"
},
"./firestore/lite": {
"node": {
"require": "./firestore/lite/dist/index.cjs.js",
"import": "./firestore/lite/dist/index.mjs"
},
"default": "./firestore/lite/dist/index.esm.js"
},
"./functions": {
"node": {
"require": "./functions/dist/index.cjs.js",
"import": "./functions/dist/index.mjs"
},
"default": "./functions/dist/index.esm.js"
},
"./messaging": {
"node": {
"require": "./messaging/dist/index.cjs.js",
"import": "./messaging/dist/index.mjs"
},
"default": "./messaging/dist/index.esm.js"
},
"./messaging/sw": {
"node": {
"require": "./messaging/sw/dist/index.cjs.js",
"import": "./messaging/sw/dist/index.mjs"
},
"default": "./messaging/sw/dist/index.esm.js"
},
"./performance": {
"node": {
"require": "./performance/dist/index.cjs.js",
"import": "./performance/dist/index.mjs"
},
"default": "./performance/dist/index.esm.js"
},
"./remote-config": {
"node": {
"require": "./remote-config/dist/index.cjs.js",
"import": "./remote-config/dist/index.mjs"
},
"default": "./remote-config/dist/index.esm.js"
},
"./storage": {
"node": {
"require": "./storage/dist/index.cjs.js",
"import": "./storage/dist/index.mjs"
},
"default": "./storage/dist/index.esm.js"
},
"./compat/analytics": {
"node": {
"require": "./compat/analytics/dist/index.cjs.js",
"import": "./compat/analytics/dist/index.mjs"
},
"default": "./compat/analytics/dist/index.esm.js"
},
"./compat/app": {
"node": {
"require": "./compat/app/dist/index.cjs.js",
"import": "./compat/app/dist/index.mjs"
},
"default": "./compat/app/dist/index.esm.js"
},
"./compat/app-check": {
"node": {
"require": "./compat/app-check/dist/index.cjs.js",
"import": "./compat/app-check/dist/index.mjs"
},
"default": "./compat/app-check/dist/index.esm.js"
},
"./compat/auth": {
"node": {
"require": "./compat/auth/dist/index.cjs.js",
"import": "./compat/auth/dist/index.mjs"
},
"default": "./compat/auth/dist/index.esm.js"
},
"./compat/database": {
"node": {
"require": "./compat/database/dist/index.cjs.js",
"import": "./compat/database/dist/index.mjs"
},
"default": "./compat/database/dist/index.esm.js"
},
"./compat/firestore": {
"node": {
"require": "./compat/firestore/dist/index.cjs.js",
"import": "./compat/firestore/dist/index.mjs"
},
"default": "./compat/firestore/dist/index.esm.js"
},
"./compat/functions": {
"node": {
"require": "./compat/functions/dist/index.cjs.js",
"import": "./compat/functions/dist/index.mjs"
},
"default": "./compat/functions/dist/index.esm.js"
},
"./compat/messaging": {
"node": {
"require": "./compat/messaging/dist/index.cjs.js",
"import": "./compat/messaging/dist/index.mjs"
},
"default": "./compat/messaging/dist/index.esm.js"
},
"./compat/performance": {
"node": {
"require": "./compat/performance/dist/index.cjs.js",
"import": "./compat/performance/dist/index.mjs"
},
"default": "./compat/performance/dist/index.esm.js"
},
"./compat/remote-config": {
"node": {
"require": "./compat/remote-config/dist/index.cjs.js",
"import": "./compat/remote-config/dist/index.mjs"
},
"default": "./compat/remote-config/dist/index.esm.js"
},
"./compat/storage": {
"node": {
"require": "./compat/storage/dist/index.cjs.js",
"import": "./compat/storage/dist/index.mjs"
},
"default": "./compat/storage/dist/index.esm.js"
}
},
"files": [
"**/dist/",
"**/package.json",
"/firebase*.js",
"/firebase*.map",
"compat/index.d.ts"
],
"homepage": "https://firebase.google.com/",
"keywords": [
"authentication",
"database",
"Firebase",
"firebase",
"realtime",
"storage",
"performance",
"remote-config"
],
"license": "Apache-2.0",
"name": "firebase",
"repository": {
"type": "git",
"url": "git+https://github.com/firebase/firebase-js-sdk.git"
},
"scripts": {
"build": "rollup -c && gulp cdn-type-module-path && yarn build:compat",
"build:compat": "rollup -c compat/rollup.config.js",
"dev": "rollup -c -w",
"test": "echo 'No test suite for firebase wrapper'",
"test:ci": "echo 'No test suite for firebase wrapper'"
},
"version": "9.0.1"
}
this is my component . here i have used firebse
import { useSession } from "next-auth/client";
import Image from "next/image";
import { EmojiHappyIcon } from "@heroicons/react/outline";
import { CameraIcon, VideoCameraIcon } from "@heroicons/react/solid";
import { useRef, useState } from "react";
import { db, storage } from "../firebase";
import firebase from "firebase";
function InputBox() {
const [session] = useSession();
const inputRef = useRef(null);
const filePickerRef = useRef(null);
const [imageToPost, setImageToPost] = useState(null);
const sendPost = (e) => {
e.preventDefault();
if (!inputRef.current.value) return;
db.collection("posts")
.add({
message: inputRef.current.value,
name: session.user.name,
email: session.user.email,
image: session.user.image,
timestamp: firebase.firestore.FieldValue.serverTimestamp(),
})
.then((doc) => {
if (imageToPost) {
const uploadTask = storage
.ref(`posts/${doc.id}`)
.putString(imageToPost, "data_url");
removeImage();
uploadTask.on(
"state_change",
null,
(error) => console.error(error),
() => {
storage
.ref(`posts`)
.child(doc.id)
.getDownloadURL()
.then((url) => {
db.collection("posts").doc(doc.id).set(
{
postImage: url,
},
{ merge: true }
);
});
}
);
}
});
inputRef.current.value = "";
};
const addImageToPost = (e) => {
const reader = new FileReader();
if (e.target.files[0]) {
reader.readAsDataURL(e.target.files[0]);
}
reader.onload = (event) => {
setImageToPost(event.target.result);
};
};
const removeImage = () => {
setImageToPost(null);
};
return (
<div className="bg-white p-2 rounded-2xl shadow-md text-gray-500 font-medium mt-6">
<div className="flex space-x-4 p-4 items-center">
<Image
alt="icon"
className="rounded-full"
src={session.user.image}
width={40}
height={40}
layout="fixed"
/>
<form className="flex flex-1">
<input
ref={inputRef}
className="rounded-full h-12 bg-gray-100 flex-grow px-5 focus:outline-none"
type="text"
placeholder={`What's on yout mind, ${session.user.name}`}
/>
<button hidden type="submit" onClick={sendPost}>
Submit
</button>
</form>
{imageToPost && (
<div
onClick={removeImage}
className="flex flex-col filter hover:brightness-110 transition duration-150 transform hover:scale-105 cursor-pointer"
>
<img className="h-10 object-contain" scr={imageToPost} alt="" />
<p className="text-xs text-red-500 text-center">Remove</p>
</div>
)}
</div>
<div className="flex justify-evenl p-3 border-t">
<div className="inputIcon">
<VideoCameraIcon className="h-7 text-red-500" />
<p className="text-xs sm:text-sm xl:text-base">Live Video</p>
</div>
<div
className="inputIcon"
onClick={() => filePickerRef.current.click()}
>
<CameraIcon className="h-7 text-green-400" />
<p className="text-xs sm:text-sm">Photo/Video</p>
<input
ref={filePickerRef}
onChange={addImageToPost}
type="file"
hidden
/>
</div>
<div className="inputIcon">
<EmojiHappyIcon className="h-7 text-yellow-300" />
<p className="text-xs sm:text-sm xl:text-base">Feeling/Activity</p>
</div>
</div>
</div>
);
}
export default InputBox;
and this is configuration file of firebase
import firebase from "firebase";
import "firebase/storage";
const firebaseConfig = {
apiKey: "AIzaSyA5Z47-ShjE3s9u6Sn70UGLg6Y_XiwqimI",
authDomain: "f-b-clone.firebaseapp.com",
projectId: "f-b-clone",
storageBucket: "f-b-clone.appspot.com",
messagingSenderId: "199066964646",
appId: "1:199066964646:web:6ba2519e34d017023bda67",
};
const app = !firebase.apps.length
? firebase.initializeApp(firebaseConfig)
: firebase.app();
const db = app.firestore();
const storage = firebase.storage();
export { db, storage };
Upvotes: 0
Views: 8302
Reputation: 50850
As @Kox mentioned you are not using the new modular SDK syntax. You would have to refactor all of your code the new syntax or use compat libraries as shown below for now since it seems you have a lot of code to refactor:
import firebase from "firebase/compat/app";
import "firebase/compat/storage";
You can change your imports to these compat libraries so you won't have to refactor all of your code now to proceed. But I'd recommend creating a new branch and start migrating to the new modular syntax to get benefit from tree-shaking.
Upvotes: 2
Reputation: 853
Firebase released a new version (v9.0) few days ago with modular support for tree-shaking.
Basically you should use it this way:
import { initializeApp } from 'firebase/app';
const config = { ... };
const app = initializeApp(config);
You can find more on this in the docs.
Upvotes: 2