System of Node.js Module
📦 Node.js এর Modular System
প্রথমদিকে যখন আমরা ওয়েবসাইট তৈরি করতাম, তখন HTML দিয়ে স্ট্রাকচার, CSS দিয়ে ডিজাইন এবং JavaScript দিয়ে ইন্টার্যাক্টিভিটি যোগ করতাম।
JavaScript-এ কোড লেখার সময় আমরা সাধারণত var
ব্যবহার করে ভেরিয়েবল ডিক্লেয়ার করতাম, যেমন:
var a = 10;
তবে var
দিয়ে ডিক্লেয়ার করা ভেরিয়েবল গুলো Global Scope এ থাকত, যার মানে হলো window.a
দিয়েও এক্সেস করা যেত।
এমনকি var
দিয়ে ডিক্লেয়ার করা ফাংশনও window
অবজেক্টের অধীনে চলে যেত:
var add = function(x, y) {
return x + y;
}
🧠 var
এর সমস্যা ও let
এর সমাধান
var
ব্যবহারে স্কোপ কনফ্লিক্টের সমস্যা দেখা দেয়।
এই সমস্যার সমাধানে আসে let
এবং const
— যারা Block Scoped:
let a = 10;
console.log(window.a); // undefined
এগুলো window
অবজেক্টে যুক্ত হয় না, ফলে স্কোপ কনফ্লিক্ট কমে।
🧩 কোডকে আলাদা করা: ফাইলভিত্তিক জাভাস্ক্রিপ্ট
যখন অ্যাপ্লিকেশন বড় হতে থাকে, তখন কোডও বড় হয়। এ সময় কোডকে আলাদা আলাদা ফাইলে ভাগ করা প্রয়োজন হয়।
কিন্তু, যদি আলাদা দুই ফাইলে একই নামের ভেরিয়েবল/ফাংশন থাকে, তাহলে HTML ফাইলে স্ক্রিপ্ট ট্যাগে যুক্ত করলে নেম কনফ্লিক্ট হয়।
// file1.js
let a = 10;
let add = (x, y) => x + y;
// file2.js
let a = 20;
let add = (x, y, z) => x + y + z;
এগুলো যদি একই HTML ফাইলে যুক্ত করা হয়, তাহলে সমস্যার সৃষ্টি হয়।
🛡️ সমাধান: Function Scope ব্যবহার (IIFE)
এই কনফ্লিক্ট এড়াতে, আমরা কোডকে আলাদা আলাদা ফাংশনের ভিতরে রাখতে পারি।
সবচেয়ে জনপ্রিয় প্যাটার্ন হলো IIFE (Immediately Invoked Function Expression):
(function () {
let a = 10;
function add(x, y) {
return x + y;
}
})();
এইভাবে করলে:
- প্রতিটি কোড নিজস্ব স্কোপে থাকে
- একই নামের ভেরিয়েবল বা ফাংশন কনফ্লিক্ট করে না
🔍 দুটি আলাদা IIFE একে অপরের মধ্যে হস্তক্ষেপ করবে না কারণ তারা নিজ নিজ স্কোপে বন্দী।
⚠️ IIFE এর সীমাবদ্ধতা
যদিও IIFE আমাদের স্কোপ ইস্যু থেকে বাঁচায়, কিন্তু বড় কোডবেইসে:
- প্রতিটি অংশকে IIFE-র ভিতরে রাখা ঝামেলার
- কোড পড়া ও রক্ষণাবেক্ষণ কঠিন হয়ে পড়ে
🚀 সমাধান: Modular System
এই সমস্যার সমাধানে আসে Modular System।
Node.js এ মূলত দুটি ধরণের মডিউল সিস্টেম রয়েছে:
- CommonJS (CJS) — প্রথাগত Node.js স্ট্যান্ডার্ড
- ESM (ECMAScript Modules) — JavaScript এর নতুন স্ট্যান্ডার্ড
🧱 Module মানে কী?
Module মানে হচ্ছে একটি নির্দিষ্ট কোডের টুকরো যা:
- নিজস্ব স্কোপে চলে
- বাহিরের কোনো কিছু জানে না
- বাহিরে শুধু নির্দিষ্ট অংশ
export
করে
📦 Module system কোডকে টুকরো টুকরো করে reusable করে তোলে।
🔚 উপসংহার
বিষয় | ব্যাখ্যা |
---|---|
var | Global scope-এ accessible, কনফ্লিক্ট প্রবণ |
let / const | Block scope-এ থাকে, নিরাপদ |
IIFE | স্কোপে বন্দী রাখে, কিন্তু বড় কোডে ঝামেলা |
Modular System | স্ট্যান্ডার্ড ও ব্যবহারযোগ্য পদ্ধতি |
🚀 পরবর্তী ধাপে:
আমরা দেখবো কীভাবে CommonJS