বর্তমানে যে অ্যাপগুলি Firebase ওয়েব SDK সংস্করণ 8 বা তার আগের ব্যবহার করছে তাদের এই নির্দেশিকায় দেওয়া নির্দেশাবলী ব্যবহার করে সংস্করণ 9-এ স্থানান্তরিত করার কথা বিবেচনা করা উচিত।
এই নির্দেশিকা অনুমান করে যে আপনি সংস্করণ 8 এর সাথে পরিচিত এবং আপগ্রেড এবং চলমান সংস্করণ 9 বিকাশের জন্য আপনি ওয়েবপ্যাক বা রোলআপের মতো একটি মডিউল বান্ডলারের সুবিধা গ্রহণ করবেন।
আপনার উন্নয়ন পরিবেশে একটি মডিউল বান্ডলার ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। আপনি যদি একটি ব্যবহার না করেন, আপনি হ্রাসকৃত অ্যাপের আকারে সংস্করণ 9 এর প্রধান সুবিধাগুলির সুবিধা নিতে সক্ষম হবেন না৷ SDK ইনস্টল করার জন্য আপনার npm বা সুতার প্রয়োজন হবে।
এই নির্দেশিকায় আপগ্রেডের পদক্ষেপগুলি একটি কাল্পনিক ওয়েব অ্যাপের উপর ভিত্তি করে হবে যা প্রমাণীকরণ এবং ক্লাউড ফায়ারস্টোর SDK ব্যবহার করে। উদাহরণগুলির মাধ্যমে কাজ করে, আপনি সমস্ত সমর্থিত Firebase ওয়েব SDK আপগ্রেড করার জন্য প্রয়োজনীয় ধারণাগুলি এবং বাস্তব পদক্ষেপগুলি আয়ত্ত করতে পারেন৷
কমপ্যাট লাইব্রেরি সম্পর্কে
Firebase ওয়েব SDK সংস্করণ 9 এর জন্য দুটি ধরণের লাইব্রেরি উপলব্ধ রয়েছে:
- মডুলার - আপনার ওয়েব অ্যাপকে যতটা সম্ভব ছোট এবং দ্রুত করতে ট্রি-কাঁপানো (অব্যবহৃত কোড অপসারণ) সহজতর করার জন্য ডিজাইন করা একটি নতুন API পৃষ্ঠ।
- কম্প্যাট - একটি পরিচিত API পৃষ্ঠ যা সংস্করণ 8 SDK-এর সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ, যা আপনাকে একবারে আপনার সমস্ত Firebase কোড পরিবর্তন না করে সংস্করণ 9-এ আপগ্রেড করার অনুমতি দেয়৷ কম্প্যাট লাইব্রেরিগুলির তাদের সংস্করণ 8 এর সমকক্ষগুলির তুলনায় সামান্য থেকে কোন আকার বা কার্যকারিতা সুবিধা নেই।
এই গাইডটি অনুমান করে যে আপনি আপনার আপগ্রেডের সুবিধার্থে সংস্করণ 9 কম্প্যাট লাইব্রেরির সুবিধা নেবেন। এই লাইব্রেরিগুলি আপনাকে সংস্করণ 9 এর জন্য রিফ্যাক্টর করা কোডের পাশাপাশি সংস্করণ 8 কোড ব্যবহার চালিয়ে যেতে দেয়। এর মানে আপনি আপগ্রেড প্রক্রিয়ার মাধ্যমে কাজ করার সাথে সাথে আপনার অ্যাপটি আরও সহজে কম্পাইল এবং ডিবাগ করতে পারবেন।
ফায়ারবেস ওয়েব SDK-তে খুব ছোট এক্সপোজার সহ অ্যাপগুলির জন্য - উদাহরণস্বরূপ, একটি অ্যাপ যা প্রমাণীকরণ API-কে শুধুমাত্র একটি সাধারণ কল করে - এটি সংস্করণ 9 কমপ্যাট লাইব্রেরি ব্যবহার না করে রিফ্যাক্টর সংস্করণ 8 কোডের জন্য ব্যবহারিক হতে পারে। আপনি যদি এই ধরনের একটি অ্যাপ আপগ্রেড করে থাকেন, তাহলে আপনি কম্প্যাট লাইব্রেরি ব্যবহার না করেই "সংস্করণ 9 মডুলার"-এর জন্য এই নির্দেশিকায় দেওয়া নির্দেশাবলী অনুসরণ করতে পারেন।
আপগ্রেড প্রক্রিয়া সম্পর্কে
আপগ্রেড প্রক্রিয়ার প্রতিটি ধাপে স্কোপ করা হয়েছে যাতে আপনি আপনার অ্যাপের জন্য উৎস সম্পাদনা শেষ করতে পারেন এবং তারপরে এটিকে কম্পাইল করে ভাঙ্গন ছাড়াই চালাতে পারেন। সংক্ষেপে, একটি অ্যাপ আপগ্রেড করতে আপনি যা করবেন তা এখানে:
- আপনার অ্যাপে সংস্করণ 9 লাইব্রেরি এবং কমপ্যাট লাইব্রেরি যোগ করুন।
- v9 কম্প্যাটে আপনার কোডে আমদানি বিবৃতি আপডেট করুন।
- একটি একক পণ্যের জন্য রিফ্যাক্টর কোড (উদাহরণস্বরূপ, প্রমাণীকরণ) মডুলার শৈলীতে।
- ঐচ্ছিক: এই মুহুর্তে, চালিয়ে যাওয়ার আগে প্রমাণীকরণের জন্য অ্যাপের আকারের সুবিধা উপলব্ধি করার জন্য প্রমাণীকরণের জন্য প্রমাণীকরণ কম্প্যাট লাইব্রেরি এবং কম্প্যাট কোড সরিয়ে দিন।
- প্রতিটি পণ্যের জন্য রিফ্যাক্টর ফাংশন (উদাহরণস্বরূপ, ক্লাউড ফায়ারস্টোর, এফসিএম, ইত্যাদি) মডুলার শৈলীতে, সমস্ত এলাকা সম্পূর্ণ না হওয়া পর্যন্ত কম্পাইল করা এবং পরীক্ষা করা।
- মডুলার শৈলীতে আরম্ভ করার কোড আপডেট করুন।
- আপনার অ্যাপ থেকে সমস্ত অবশিষ্ট সংস্করণ 9 কম্প্যাট বিবৃতি এবং কম্প্যাট কোড সরান।
সংস্করণ 9 SDK পান
শুরু করতে, npm ব্যবহার করে সংস্করণ 9 লাইব্রেরি এবং কম্প্যাট লাইব্রেরি পান:
npm i firebase@9.22.1 # OR yarn add firebase@9.22.1
v9 কম্প্যাটে আমদানি আপডেট করুন
v8 থেকে v9 বিটাতে আপনার নির্ভরতা আপডেট করার পরে আপনার কোডটি কার্যকর রাখার জন্য, প্রতিটি আমদানির "কম্প্যাট" সংস্করণ ব্যবহার করতে আপনার আমদানি বিবৃতি পরিবর্তন করুন৷ উদাহরণ স্বরূপ:
আগে: সংস্করণ 8
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
পরে: সংস্করণ 9 কম্প্যাট
// v9 compat packages are API compatible with v8 code
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
মডুলার শৈলী রিফ্যাক্টর
যদিও সংস্করণ 8 এপিআই একটি ডট-চেইনড নেমস্পেস এবং পরিষেবা প্যাটার্নের উপর ভিত্তি করে, সংস্করণ 9 এর মডুলার পদ্ধতির অর্থ হল আপনার কোডটি মূলত ফাংশনগুলির চারপাশে সংগঠিত হবে। সংস্করণ 9-এ, firebase/app
প্যাকেজ এবং অন্যান্য প্যাকেজগুলি প্যাকেজ থেকে সমস্ত পদ্ধতি ধারণ করে এমন একটি ব্যাপক রপ্তানি ফেরত দেয় না। পরিবর্তে, প্যাকেজগুলি পৃথক ফাংশন রপ্তানি করে।
সংস্করণ 9-এ, পরিষেবাগুলিকে প্রথম যুক্তি হিসাবে পাস করা হয়, এবং ফাংশনটি তারপর পরিষেবার বিশদ বিবরণ ব্যবহার করে বাকিগুলি করতে। প্রমাণীকরণ এবং ক্লাউড ফায়ারস্টোর API-কে রিফ্যাক্টর কল করে এমন দুটি উদাহরণে এটি কীভাবে কাজ করে তা পরীক্ষা করা যাক।
উদাহরণ 1: একটি প্রমাণীকরণ ফাংশন রিফ্যাক্টরিং
আগে: সংস্করণ 9 কম্প্যাট
সংস্করণ 9 কম্প্যাট কোড সংস্করণ 8 কোডের অনুরূপ, কিন্তু আমদানি পরিবর্তিত হয়েছে।
import firebase from "firebase/compat/app";
import "firebase/compat/auth";
const auth = firebase.auth();
auth.onAuthStateChanged(user => {
// Check for user status
});
পরে: সংস্করণ 9 মডুলার
getAuth
ফাংশনটি firebaseApp
কে তার প্রথম প্যারামিটার হিসেবে নেয়। onAuthStateChanged
ফাংশনটি auth
ইন্সট্যান্স থেকে শৃঙ্খলিত নয় যেমন এটি সংস্করণ 8 এ থাকবে; পরিবর্তে, এটি একটি বিনামূল্যের ফাংশন যা auth
তার প্রথম প্যারামিটার হিসেবে নেয়।
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
// Check for user status
});
Auth পদ্ধতি getRedirectResult
এর হ্যান্ডলিং আপডেট করুন
সংস্করণ 9 getRedirectResult
এ একটি ব্রেকিং পরিবর্তন প্রবর্তন করে। যখন কোন রিডাইরেক্ট অপারেশন কল করা হয় না, ভার্সন 8 ভার্সন 8 এর বিপরীতে null
রিটার্ন করে, যা null
ইউজারের সাথে ইউজার UserCredential
করে।
আগে: সংস্করণ 9 কম্প্যাট
const result = await auth.getRedirectResult()
if (result.user === null && result.credential === null) {
return null;
}
return result;
পরে: সংস্করণ 9 মডুলার
const result = await getRedirectResult(auth);
// Provider of the access token could be Facebook, Github, etc.
if (result === null || provider.credentialFromResult(result) === null) {
return null;
}
return result;
উদাহরণ 2: একটি ক্লাউড ফায়ারস্টোর ফাংশন রিফ্যাক্টরিং
আগে: সংস্করণ 9 কম্প্যাট
import "firebase/compat/firestore"
const db = firebase.firestore();
db.collection("cities").where("capital", "==", true)
.get()
.then((querySnapshot) => {
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch((error) => {
console.log("Error getting documents: ", error);
});
পরে: সংস্করণ 9 মডুলার
getFirestore
ফাংশনটি firebaseApp
কে তার প্রথম প্যারামিটার হিসেবে নেয়, যা একটি আগের উদাহরণে initializeApp
অ্যাপ থেকে ফেরত দেওয়া হয়েছিল। নোট করুন কিভাবে একটি ক্যোয়ারী গঠনের কোডটি সংস্করণ 9-এ খুব আলাদা; কোন চেইনিং নেই, এবং পদ্ধতি যেমন query
বা where
এখন বিনামূল্যে ফাংশন হিসাবে উন্মুক্ত করা হয়.
import { getFirestore, collection, query, where, getDocs } from "firebase/firestore";
const db = getFirestore(firebaseApp);
const q = query(collection(db, "cities"), where("capital", "==", true));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
Firestore DocumentSnapshot.exists
এর রেফারেন্স আপডেট করুন
সংস্করণ 9 একটি ব্রেকিং পরিবর্তন প্রবর্তন করে যেখানে সম্পত্তি firestore.DocumentSnapshot.exists
একটি পদ্ধতিতে পরিবর্তন করা হয়েছে। কার্যকারিতাটি মূলত একই (কোন নথি বিদ্যমান কিনা তা পরীক্ষা করা) তবে দেখানো হিসাবে v9 পদ্ধতি ব্যবহার করতে আপনাকে অবশ্যই আপনার কোড রিফ্যাক্টর করতে হবে:
আগে: সংস্করণ 9 কম্প্যাট
if (snapshot.exists) {
console.log("the document exists");
}
পরে: সংস্করণ 9 মডুলার
if (snapshot.exists()) {
console.log("the document exists");
}
উদাহরণ 3: সংস্করণ 8 এবং সংস্করণ 9 কোড শৈলী একত্রিত করা
আপগ্রেডের সময় কমপ্যাট লাইব্রেরি ব্যবহার করলে আপনি সংস্করণ 9-এর জন্য রিফ্যাক্টর করা কোডের পাশাপাশি সংস্করণ 8 কোড ব্যবহার চালিয়ে যেতে পারবেন। এর মানে হল আপনি ক্লাউড ফায়ারস্টোরের জন্য বিদ্যমান সংস্করণ 8 কোড রাখতে পারবেন যখন আপনি প্রমাণীকরণ বা অন্যান্য Firebase SDK কোড সংস্করণ 9 স্টাইলে রিফ্যাক্টর করবেন এবং এখনও উভয় কোড শৈলীর সাথে আপনার অ্যাপটি সফলভাবে কম্পাইল করুন। ক্লাউড ফায়ারস্টোরের মতো পণ্যের মধ্যে সংস্করণ 8 এবং সংস্করণ 9 কোডের ক্ষেত্রেও একই কথা সত্য; নতুন এবং পুরানো কোড শৈলী সহাবস্থান করতে পারে, যতক্ষণ না আপনি কম্প্যাট প্যাকেজগুলি আমদানি করছেন:
import firebase from 'firebase/compat/app';
import 'firebase/compat/firestore';
import { getDoc } from 'firebase/firestore'
const docRef = firebase.firestore().doc();
getDoc(docRef);
মনে রাখবেন যে, যদিও আপনার অ্যাপটি কম্পাইল করা হবে, আপনি মডুলার কোডের অ্যাপ সাইজ সুবিধা পাবেন না যতক্ষণ না আপনি আপনার অ্যাপ থেকে কম্প্যাট স্টেটমেন্ট এবং কোড সম্পূর্ণভাবে মুছে ফেলছেন।
সূচনা কোড আপডেট করুন
নতুন মডুলার সংস্করণ 9 সিনট্যাক্স ব্যবহার করতে আপনার অ্যাপের শুরুর কোড আপডেট করুন। আপনি আপনার অ্যাপের সমস্ত কোড রিফ্যাক্টরিং সম্পন্ন করার পরে এই কোডটি আপডেট করা গুরুত্বপূর্ণ; এর কারণ হল firebase.initializeApp()
এবং মডুলার API উভয়ের জন্যই গ্লোবাল স্টেট আরম্ভ করে, যেখানে মডুলার initializeApp()
ফাংশন শুধুমাত্র মডুলারের জন্য স্টেট আরম্ভ করে।
আগে: সংস্করণ 9 কম্প্যাট
import firebase from "firebase/compat/app"
firebase.initializeApp({ /* config */ });
পরে: সংস্করণ 9 মডুলার
import { initializeApp } from "firebase/app"
const firebaseApp = initializeApp({ /* config */ });
কমপ্যাট কোড সরান
সংস্করণ 9 মডুলার SDK-এর আকারের সুবিধাগুলি উপলব্ধি করতে, আপনাকে শেষ পর্যন্ত সমস্ত আহ্বানকে উপরে দেখানো মডুলার শৈলীতে রূপান্তর করতে হবে এবং আপনার কোড থেকে import "firebase/compat/*
স্টেটমেন্টগুলি সরিয়ে ফেলতে হবে৷ আপনার কাজ শেষ হয়ে গেলে, সেখানে কোন কিছু থাকবে না৷ firebase.*
গ্লোবাল নেমস্পেস বা সংস্করণ 8 SDK স্টাইলে অন্য কোনো কোড।
উইন্ডো থেকে কম্প্যাট লাইব্রেরি ব্যবহার করে
সংস্করণ 9 SDK ব্রাউজারের window
অবজেক্টের পরিবর্তে মডিউলগুলির সাথে কাজ করার জন্য অপ্টিমাইজ করা হয়েছে৷ লাইব্রেরির পূর্ববর্তী সংস্করণ window.firebase
নামস্থান ব্যবহার করে Firebase-এর লোডিং এবং পরিচালনার অনুমতি দেয়। এটি এগিয়ে যাওয়ার সুপারিশ করা হয় না কারণ এটি অব্যবহৃত কোড নির্মূল করার অনুমতি দেয় না। যাইহোক, JavaScript SDK-এর কম্প্যাট সংস্করণটি সেই বিকাশকারীদের জন্য window
সাথে কাজ করে যারা মডুলার আপগ্রেড পাথ অবিলম্বে শুরু করতে পছন্দ করে না।
<script src="https://www.gstatic.com/firebasejs/9.22.1/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.22.1/firebase-firestore-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/9.22.1/firebase-auth-compat.js"></script>
<script>
const firebaseApp = firebase.initializeApp({ /* Firebase config */ });
const db = firebaseApp.firestore();
const auth = firebaseApp.auth();
</script>
সামঞ্জস্যপূর্ণ লাইব্রেরি হুডের নিচে মডুলার সংস্করণ 9 কোড ব্যবহার করে এবং এটিকে সংস্করণ 8 SDK-এর মতো একই API প্রদান করে; এর মানে আপনি বিবরণের জন্য সংস্করণ 8 API রেফারেন্স এবং সংস্করণ 8 কোড স্নিপেটগুলি উল্লেখ করতে পারেন। এই পদ্ধতিটি দীর্ঘমেয়াদী ব্যবহারের জন্য সুপারিশ করা হয় না, তবে সম্পূর্ণরূপে মডুলার সংস্করণ 9 লাইব্রেরিতে আপগ্রেড করার জন্য একটি শুরু হিসাবে।
সংস্করণ 9 এর সুবিধা এবং সীমাবদ্ধতা
সম্পূর্ণরূপে মডুলারাইজড সংস্করণ 9 এর আগের সংস্করণগুলির তুলনায় এই সুবিধাগুলি রয়েছে:
- সংস্করণ 9 একটি নাটকীয়ভাবে হ্রাস করা অ্যাপের আকার সক্ষম করে৷ এটি আধুনিক জাভাস্ক্রিপ্ট মডিউল ফর্ম্যাট গ্রহণ করে, "গাছ কাঁপানো" অনুশীলনের অনুমতি দেয় যেখানে আপনি শুধুমাত্র আপনার অ্যাপের প্রয়োজনীয় শিল্পকর্ম আমদানি করেন। আপনার অ্যাপের উপর নির্ভর করে, সংস্করণ 9-এর সাথে গাছ-কাঁপানোর ফলে সংস্করণ 8 ব্যবহার করে নির্মিত তুলনামূলক অ্যাপের তুলনায় 80% কম কিলোবাইট হতে পারে।
- সংস্করণ 9 চলমান বৈশিষ্ট্য বিকাশ থেকে উপকৃত হতে থাকবে, যখন সংস্করণ 8 ভবিষ্যতে একটি বিন্দুতে হিমায়িত হবে।