compat লাইব্রেরি থেকে শুরু করে ৮ম বা তার আগের সংস্করণ পর্যন্ত, যেকোনো নেমস্পেসড ফায়ারবেস ওয়েব এপিআই ব্যবহারকারী অ্যাপগুলির জন্য এই নির্দেশিকায় দেওয়া নির্দেশাবলী ব্যবহার করে মডুলার এপিআইতে স্থানান্তর করার কথা বিবেচনা করা উচিত।
এই নির্দেশিকাটি ধরে নিয়েছে যে আপনি নেমস্পেসড এপিআই-এর সাথে পরিচিত এবং আপগ্রেড এবং চলমান মডুলার অ্যাপ ডেভেলপমেন্টের জন্য আপনি ওয়েবপ্যাক বা রোলআপের মতো মডিউল বান্ডলারের সুবিধা নেবেন।
আপনার ডেভেলপমেন্ট পরিবেশে একটি মডিউল বান্ডলার ব্যবহার করার জন্য জোরালো পরামর্শ দেওয়া হচ্ছে। যদি আপনি এটি ব্যবহার না করেন, তাহলে অ্যাপের আকার কমিয়ে মডিউলার API-এর প্রধান সুবিধাগুলি আপনি নিতে পারবেন না। SDK ইনস্টল করার জন্য আপনার npm বা yarn প্রয়োজন হবে।
এই নির্দেশিকার আপগ্রেড ধাপগুলি একটি কাল্পনিক ওয়েব অ্যাপের উপর ভিত্তি করে তৈরি করা হবে যা Authentication এবং Cloud Firestore SDK ব্যবহার করে। উদাহরণগুলি ব্যবহার করে, আপনি সমস্ত সমর্থিত Firebase ওয়েব SDK আপগ্রেড করার জন্য প্রয়োজনীয় ধারণা এবং ব্যবহারিক পদক্ষেপগুলি আয়ত্ত করতে পারবেন।
নেমস্পেসড ( compat ) লাইব্রেরি সম্পর্কে
Firebase ওয়েব SDK-এর জন্য দুই ধরণের লাইব্রেরি উপলব্ধ:
- মডুলার - একটি নতুন API সারফেস যা আপনার ওয়েব অ্যাপটিকে যতটা সম্ভব ছোট এবং দ্রুততর করার জন্য ট্রি-শেকিং (অব্যবহৃত কোড অপসারণ) সহজতর করার জন্য ডিজাইন করা হয়েছে।
- নেমস্পেসড (
compat) - একটি পরিচিত API সারফেস যা SDK এর পূর্ববর্তী সংস্করণগুলির সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ, যা আপনাকে আপনার সমস্ত Firebase কোড একবারে পরিবর্তন না করেই আপগ্রেড করতে দেয়। কম্প্যাট লাইব্রেরিগুলির তাদের নেমস্পেসড প্রতিরূপের তুলনায় আকার বা কর্মক্ষমতা সুবিধা খুব কম বা কোনও নেই।
এই নির্দেশিকাটি ধরে নিয়েছে যে আপনার আপগ্রেড সহজতর করার জন্য আপনি কম্প্যাট লাইব্রেরিগুলির সুবিধা গ্রহণ করবেন। এই লাইব্রেরিগুলি আপনাকে মডুলার API-এর জন্য রিফ্যাক্টর করা কোডের পাশাপাশি নেমস্পেসড কোড ব্যবহার চালিয়ে যেতে দেয়। এর অর্থ হল আপগ্রেড প্রক্রিয়াটি সম্পন্ন করার সাথে সাথে আপনি আপনার অ্যাপটি আরও সহজে কম্পাইল এবং ডিবাগ করতে পারবেন।
যেসব অ্যাপের Firebase ওয়েব SDK-তে খুব কম এক্সপোজার আছে—যেমন, এমন একটি অ্যাপ যা শুধুমাত্র Authentication API-তে একটি সহজ কল করে—তাদের জন্য compat লাইব্রেরি ব্যবহার না করেই পুরানো নেমস্পেসড কোড রিফ্যাক্টর করা ব্যবহারিক হতে পারে। যদি আপনি এই ধরনের একটি অ্যাপ আপগ্রেড করেন, তাহলে আপনি compat লাইব্রেরি ব্যবহার না করেই "মডুলার API"-এর জন্য এই নির্দেশিকা অনুসরণ করতে পারেন।
আপগ্রেড প্রক্রিয়া সম্পর্কে
আপগ্রেড প্রক্রিয়ার প্রতিটি ধাপ এমনভাবে সাজানো হয়েছে যাতে আপনি আপনার অ্যাপের সোর্স সম্পাদনা শেষ করতে পারেন এবং তারপর ভাঙা ছাড়াই কম্পাইল করে চালাতে পারেন। সংক্ষেপে, একটি অ্যাপ আপগ্রেড করার জন্য আপনাকে যা করতে হবে তা এখানে দেওয়া হল:
- আপনার অ্যাপে মডুলার লাইব্রেরি এবং কম্প্যাট লাইব্রেরি যোগ করুন।
- আপনার কোডের ইম্পোর্ট স্টেটমেন্টগুলি compat-এ আপডেট করুন।
- একটি একক পণ্যের (যেমন, Authentication ) কোডকে মডুলার স্টাইলে রিফ্যাক্টর করুন।
- ঐচ্ছিক: এই মুহুর্তে, Authentication জন্য অ্যাপের আকারের সুবিধাটি উপলব্ধি করার জন্য Authentication জন্য Authentication কম্প্যাট লাইব্রেরি এবং কম্প্যাট কোডটি সরিয়ে ফেলুন।
- প্রতিটি পণ্যের (যেমন, Cloud Firestore , FCM , ইত্যাদি) রিফ্যাক্টর ফাংশনগুলিকে মডুলার স্টাইলে রূপান্তরিত করে, সমস্ত ক্ষেত্র সম্পূর্ণ না হওয়া পর্যন্ত কম্পাইলিং এবং পরীক্ষা করে।
- মডুলার স্টাইলে ইনিশিয়ালাইজেশন কোড আপডেট করুন।
- আপনার অ্যাপ থেকে বাকি সমস্ত কম্প্যাট স্টেটমেন্ট এবং কম্প্যাট কোড মুছে ফেলুন।
SDK এর সর্বশেষ সংস্করণটি পান
শুরু করতে, npm ব্যবহার করে মডুলার লাইব্রেরি এবং কম্প্যাট লাইব্রেরিগুলি পান:
npm i firebase@12.4.0 # OR yarn add firebase@12.4.0
কম্প্যাটে আমদানি আপডেট করুন
আপনার নির্ভরতা আপডেট করার পরেও আপনার কোডটি কার্যকর রাখতে, প্রতিটি আমদানির "কম্প্যাট" সংস্করণ ব্যবহার করার জন্য আপনার আমদানি বিবৃতি পরিবর্তন করুন। উদাহরণস্বরূপ:
আগে: সংস্করণ ৮ বা তার আগের
import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
পরে: কম্প্যাট
// compat packages are API compatible with namespaced code
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
import 'firebase/compat/firestore';
মডুলার স্টাইলে রিফ্যাক্টর করুন
যদিও নেমস্পেসড এপিআইগুলি ডট-চেইনড নেমস্পেস এবং সার্ভিস প্যাটার্নের উপর ভিত্তি করে তৈরি, মডুলার পদ্ধতির অর্থ হল আপনার কোডটি মূলত ফাংশনের চারপাশে সংগঠিত হবে। মডুলার এপিআইতে, firebase/app প্যাকেজ এবং অন্যান্য প্যাকেজগুলি প্যাকেজ থেকে সমস্ত পদ্ধতি ধারণ করে এমন একটি বিস্তৃত এক্সপোর্ট ফেরত দেয় না। পরিবর্তে, প্যাকেজগুলি পৃথক ফাংশন এক্সপোর্ট করে।
মডুলার API-তে, পরিষেবাগুলিকে প্রথম আর্গুমেন্ট হিসেবে পাস করা হয়, এবং ফাংশনটি তারপর বাকি কাজগুলি করার জন্য পরিষেবার বিবরণ ব্যবহার করে। আসুন দুটি উদাহরণে পরীক্ষা করা যাক যেগুলি Authentication এবং Cloud Firestore API-তে কলগুলিকে রিফ্যাক্টর করে।
উদাহরণ ১: একটি Authentication ফাংশন রিফ্যাক্টর করা
আগে: কম্প্যাট
কম্প্যাট কোডটি নেমস্পেসড কোডের মতোই, কিন্তু আমদানিগুলি পরিবর্তিত হয়েছে।
import firebase from "firebase/compat/app";
import "firebase/compat/auth";
const auth = firebase.auth();
auth.onAuthStateChanged(user => {
// Check for user status
});
পরে: মডুলার
getAuth ফাংশনটি firebaseApp তার প্রথম প্যারামিটার হিসেবে গ্রহণ করে। onAuthStateChanged ফাংশনটি auth ইনস্ট্যান্স থেকে শৃঙ্খলিত নয় যেমনটি namespaced API তে থাকে; পরিবর্তে, এটি একটি বিনামূল্যের ফাংশন যা auth তার প্রথম প্যারামিটার হিসেবে গ্রহণ করে।
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => {
// Check for user status
});
Auth পদ্ধতি getRedirectResult এর হ্যান্ডলিং আপডেট করুন
মডুলার API getRedirectResult এ একটি ব্রেকিং পরিবর্তন আনে। যখন কোনও রিডাইরেক্ট অপারেশন ডাকা হয় না, তখন মডুলার API null রিটার্ন করে, namespaced API এর বিপরীতে, যা একটি null ব্যবহারকারীর সাথে একটি UserCredential রিটার্ন করে।
আগে: কম্প্যাট
const result = await auth.getRedirectResult()
if (result.user === null && result.credential === null) {
return null;
}
return result;
পরে: মডুলার
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;
উদাহরণ ২: একটি Cloud Firestore ফাংশন রিফ্যাক্টর করা
আগে: কম্প্যাট
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);
});
পরে: মডুলার
getFirestore ফাংশনটি firebaseApp তার প্রথম প্যারামিটার হিসেবে গ্রহণ করে, যা পূর্ববর্তী একটি উদাহরণে initializeApp থেকে ফেরত পাঠানো হয়েছিল। লক্ষ্য করুন কিভাবে মডুলার API তে একটি কোয়েরি তৈরির কোডটি খুব আলাদা; কোনও চেইনিং নেই, এবং 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 এর আপডেট রেফারেন্স
মডুলার API একটি ব্রেকিং পরিবর্তন প্রবর্তন করে যেখানে firestore.DocumentSnapshot.exists প্রোপার্টিটি একটি পদ্ধতিতে পরিবর্তন করা হয়েছে। কার্যকারিতা মূলত একই (কোনও ডকুমেন্ট বিদ্যমান কিনা তা পরীক্ষা করা) তবে দেখানো নতুন পদ্ধতিটি ব্যবহার করার জন্য আপনাকে আপনার কোডটি রিফ্যাক্টর করতে হবে:
আগে: কমপ্যাট
if (snapshot.exists) {
console.log("the document exists");
}
পরে: মডুলার
if (snapshot.exists()) {
console.log("the document exists");
}
উদাহরণ ৩: নেমস্পেসড এবং মডুলার কোড স্টাইল একত্রিত করা
আপগ্রেডের সময় কম্প্যাট লাইব্রেরি ব্যবহার করলে আপনি মডুলার API-এর জন্য রিফ্যাক্টর করা কোডের পাশাপাশি নেমস্পেসড কোড ব্যবহার চালিয়ে যেতে পারবেন। এর অর্থ হল আপনি Cloud Firestore জন্য বিদ্যমান নেমস্পেসড কোডটি Authentication স্টাইলে রিফ্যাক্টর করার সময় অথবা অন্যান্য ফায়ারবেস SDK কোড ব্যবহার করে রাখতে পারবেন এবং উভয় কোড স্টাইল দিয়েই আপনার অ্যাপটি সফলভাবে কম্পাইল করতে পারবেন। Cloud Firestore মতো পণ্যের মধ্যে নেমস্পেসড এবং মডুলার API কোডের ক্ষেত্রেও একই কথা প্রযোজ্য; যতক্ষণ আপনি কম্প্যাট প্যাকেজগুলি আমদানি করছেন ততক্ষণ পর্যন্ত নতুন এবং পুরাতন কোড স্টাইল একসাথে থাকতে পারে:
import firebase from 'firebase/compat/app';
import 'firebase/compat/firestore';
import { getDoc } from 'firebase/firestore'
const docRef = firebase.firestore().doc();
getDoc(docRef);
মনে রাখবেন, যদিও আপনার অ্যাপটি কম্পাইল করবে, আপনি আপনার অ্যাপ থেকে কম্প্যাট স্টেটমেন্ট এবং কোড সম্পূর্ণরূপে অপসারণ না করা পর্যন্ত মডুলার কোডের অ্যাপ সাইজ সুবিধা পাবেন না।
ইনিশিয়ালাইজেশন কোড আপডেট করুন
মডুলার সিনট্যাক্স ব্যবহার করার জন্য আপনার অ্যাপের ইনিশিয়ালাইজেশন কোড আপডেট করুন। আপনার অ্যাপের সমস্ত কোড রিফ্যাক্টরিং সম্পন্ন করার পরে এই কোডটি আপডেট করা গুরুত্বপূর্ণ; কারণ firebase.initializeApp() কম্প্যাট এবং মডুলার উভয় API-এর জন্য গ্লোবাল স্টেট ইনিশিয়ালাইজ করে, যেখানে মডুলার initializeApp() ফাংশন শুধুমাত্র মডুলারের জন্য স্টেট ইনিশিয়ালাইজ করে।
আগে: কম্প্যাট
import firebase from "firebase/compat/app"
firebase.initializeApp({ /* config */ });
পরে: মডুলার
import { initializeApp } from "firebase/app"
const firebaseApp = initializeApp({ /* config */ });
কম্প্যাট কোড সরান
মডুলার API-এর আকারের সুবিধাগুলি উপলব্ধি করার জন্য, আপনাকে অবশেষে সমস্ত আমন্ত্রণকে উপরে দেখানো মডুলার স্টাইলে রূপান্তর করতে হবে এবং আপনার কোড থেকে import "firebase/compat/* স্টেটমেন্টগুলি সরিয়ে ফেলতে হবে। আপনার কাজ শেষ হয়ে গেলে, firebase.* গ্লোবাল নেমস্পেস বা নেমস্পেসড API স্টাইলে অন্য কোনও কোডের আর কোনও রেফারেন্স থাকবে না।
উইন্ডো থেকে কম্প্যাট লাইব্রেরি ব্যবহার করা হচ্ছে
মডুলার API ব্রাউজারের window অবজেক্টের পরিবর্তে মডিউলের সাথে কাজ করার জন্য অপ্টিমাইজ করা হয়েছে। লাইব্রেরির পূর্ববর্তী সংস্করণগুলিতে window.firebase নেমস্পেস ব্যবহার করে Firebase লোড এবং পরিচালনা করার অনুমতি দেওয়া হয়েছিল। এটি ভবিষ্যতে করার পরামর্শ দেওয়া হচ্ছে না কারণ এটি অব্যবহৃত কোড বাদ দেওয়ার অনুমতি দেয় না। তবে, জাভাস্ক্রিপ্ট SDK এর কম্প্যাট সংস্করণটি সেইসব ডেভেলপারদের জন্য window সাথে কাজ করে যারা অবিলম্বে মডুলার আপগ্রেড পথ শুরু করতে পছন্দ করেন না।
<script src="https://www.gstatic.com/firebasejs/12.4.0/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/12.4.0/firebase-firestore-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/12.4.0/firebase-auth-compat.js"></script>
<script>
const firebaseApp = firebase.initializeApp({ /* Firebase config */ });
const db = firebaseApp.firestore();
const auth = firebaseApp.auth();
</script>
সামঞ্জস্যতা লাইব্রেরিটি হুডের নীচে মডুলার কোড ব্যবহার করে এবং এটিকে নেমস্পেসড এপিআই-এর মতো একই এপিআই প্রদান করে; এর অর্থ হল আপনি বিস্তারিত জানার জন্য নেমস্পেসড এপিআই রেফারেন্স এবং নেমস্পেসড কোড স্নিপেটগুলি উল্লেখ করতে পারেন। এই পদ্ধতিটি দীর্ঘমেয়াদী ব্যবহারের জন্য সুপারিশ করা হয় না, তবে সম্পূর্ণ মডুলার লাইব্রেরিতে আপগ্রেড করার শুরু হিসাবে।
মডুলার SDK এর সুবিধা এবং সীমাবদ্ধতা
সম্পূর্ণরূপে মডুলারাইজড SDK-এর পূর্ববর্তী সংস্করণগুলির তুলনায় এই সুবিধাগুলি রয়েছে:
- মডুলার SDK অ্যাপের আকার নাটকীয়ভাবে হ্রাস করে। এটি আধুনিক জাভাস্ক্রিপ্ট মডিউল ফর্ম্যাট গ্রহণ করে, যা "গাছ কাঁপানো" অনুশীলনের অনুমতি দেয় যেখানে আপনি কেবল আপনার অ্যাপের প্রয়োজনীয় শিল্পকর্মগুলি আমদানি করতে পারেন। আপনার অ্যাপের উপর নির্ভর করে, মডুলার SDK ব্যবহার করে ট্রি-কাঁপানোর ফলে নেমস্পেসড API ব্যবহার করে তৈরি তুলনামূলক অ্যাপের তুলনায় 80% কিলোবাইট কম হতে পারে।
- মডুলার SDK চলমান বৈশিষ্ট্য উন্নয়ন থেকে উপকৃত হবে, যেখানে নেমস্পেসড API তা করবে না।