CommonJS & Local Module
এই ভিডিওতে আমরা CommonJS এবং Local Module নিয়ে বিস্তারিত জানবো। Node.js-এ মূলত ৩ ধরনের মডিউল আছে:
- Local Module — নিজের তৈরি
- Built-in Module — Node.js এর নিজস্ব
- Third-party Module — অন্যদের তৈরি, npm থেকে নেওয়া
🛠️ Local Module তৈরি
একটা ফাইল থেকে কোড export করে অন্য ফাইলে require এর মাধ্যমে import করলে সেটা একটা Module হয়ে যায়।
উদাহরণ:
🔹 File Structure:
Learning-Node/
├── file1.js
└── file2.js
🔸 file2.js
const a = 10;
module.exports = a;
এখানে আমরা a
নামের একটা ভেরিয়েবল ডিক্লেয়ার করেছি এবং module.exports
দিয়ে এক্সপোর্ট করেছি।
🔸 file1.js
const var_1 = require('./file2');
console.log(var_1); // 10
আমরা file2.js
কে require('./file2')
দিয়ে ইমপোর্ট করছি এবং সেটা var_1
ভেরিয়েবলে রেখে কনসোলে প্রিন্ট করছি।
⚠️ যদি Export না করি?
যদি আমরা file2.js
থেকে কিছু export না করি, তাহলে require
করলে আমরা empty object {}
পাব:
// file2.js
const a = 10;
// No module.exports
// file1.js
const var_1 = require('./file2');
console.log(var_1); // {}
🔍 module এর ভেতরে কী থাকে?
আমরা চাইলেই console.log(module)
করে দেখে নিতে পারি module object-এর মধ্যে কি কি আছে।
console.log(module);
🧾 Output:
Module {
id: '.',
path: '/Users/your-username/Desktop/Learning-Node',
exports: {},
filename: '/Users/your-username/Desktop/Learning-Node/file2.js',
loaded: false,
children: [],
paths: [
'/Users/your-username/Desktop/Learning-Node/node_modules',
'/Users/your-username/Desktop/node_modules',
'/Users/your-username/node_modules',
'/Users/node_modules',
'/node_modules'
]
}
🧠 ব্যাখ্যা:
প্রপার্টি | মানে কি |
---|---|
id | মডিউলের আইডি, . মানে এটা main/root module |
path | যেখান থেকে module লোড হয়েছে |
exports | যেটা অন্য ফাইল থেকে পাবে (যদি কিছু export করা হয়) |
filename | পূর্ণ ফাইল পাথ |
loaded | মডিউল লোড হয়েছে কিনা (false মানে এখনো সম্পূর্ণ execute হয়নি) |
children | অন্য মডিউল গুলো যেগুলো require করা হয়েছে |
paths | কোন কোন জায়গা থেকে require() খুঁজে দেখবে |
এখানে কিছু গুরুত্বপূর্ণ প্রপার্টি থাকবে:
id
: মডিউলের ইউনিক আইডিpath
: ফাইলের লোকেশনexports
: যেটা এক্সপোর্ট করা হয়েছেfilename
,loaded
,children
, ইত্যাদি…
🧠 উপসংহার
বিষয় | ব্যাখ্যা |
---|---|
Local Module | নিজে বানানো মডিউল |
module.exports | অন্য ফাইলের জন্য ডেটা এক্সপোর্ট করা |
require() | অন্য ফাইল থেকে ডেটা ইমপোর্ট করা |
Default return | কিছু না export করলে empty object রিটার্ন করে |
🚀 পরবর্তী ধাপে আমরা শিখবো Built-in module এবং Third-party module ব্যবহারের পদ্ধতি।
আমরা মডুলার সিস্টেমকে ডিপ ডাইভ করে বোঝার চেষ্টা করবো।
📁 মডিউল ফাইল তৈরি
আগের ভিডিওতে আমরা file2.js
নামে একটি ফাইল তৈরি করেছিলাম, যেখানে:
- একটি
add
ফাংশন ছিল - দুটি ভেরিয়েবল ছিল:
a
এবংb
- আরেকটি ভেরিয়েবল ছিল
- এবং ফাইলটি মডুলার করা হয়েছিল
এরপর আমরা আরেকটি ফাইল তৈরি করলাম file3.js
, যেখানে:
- আবার একটি
add
ফাংশন থাকবে b
ভেরিয়েবলটিও রাখা হবে
এভাবে আমরা file3.js
-কেও মডিউল হিসেবে গঠন করলাম।
🧠 Alias ব্যবহার: নাম কনফ্লিক্ট সমাধান
file1.js
এ আমরা const
এবং destructuring
করে কাজ করেছিলাম।
ধরুন, আমরা a
ভেরিয়েবলটিকে নতুন নামে নিতে চাই, তখন alias ব্যবহার করা হয়।
উদাহরণ:
const { add: a3 } = require('./file3');
এখানে add
ফাংশনকে a3
নামে নিচ্ছি কারণ এটা file3
থেকে আসছে।
🔹 এখন যদি আমরা 2 + 3
করি, ফলাফল হবে 5
।
🧹 কোড পরিষ্কার ও alias প্রয়োজনীয়তা
- আমরা dot notation বা destructuring উভয়ভাবেই কোড পরিষ্কার রাখতে পারি।
- যখন ফাংশন বা ভেরিয়েবলগুলোর নাম একই হয়ে যায়, তখন alias ব্যবহার করতে হয় যাতে কনফ্লিক্ট না হয়।
- বিশেষ করে third-party packages বা external modules ব্যবহারের সময় alias দরকার হয়।
📦 index.js ফাইলের ভূমিকা
আমরা index.js
নামে একটি ফাইল নিচ্ছি।
কিন্তু কেন?
আমাদের মূল main.js
ফাইলে যদি একাধিক ফাংশন রিকোয়্যার করতে হয়, তাহলে প্রতিটি utility ফাইল থেকে আলাদাভাবে import করা ঝামেলার — যেমন:
const add = require('./utils/add');
const subtract = require('./utils/subtract');
এর পরিবর্তে আমরা index.js
ফাইলে সব ফাংশন একত্রে export করবো:
// utils/index.js
const add = require('./add');
const subtract = require('./subtract');
module.exports = { add, subtract };
এখন main.js
ফাইল থেকে সহজে রিকোয়্যার করা যাবে:
const { add, subtract } = require('./utils');
⚠️ index.js না থাকলে কী হয়?
যদি কোনো ফোল্ডার রিকোয়্যার করা হয় কিন্তু index.js
না থাকে:
const { add } = require('./utils');
তাহলে Node.js error দিবে কারণ সে জানে না কোন ফাইলটা এক্সপোর্ট করবে।
উদাহরণ:
index.js
→ ❌index1.js
নাম দিলে- রান করার সময় → ❌ Error
Node.js ফোল্ডার থেকে রিকোয়্যার করার সময় default ভাবে index.js
খুঁজে।
✅ Smart Modular Pattern
আমরা এখন একটা স্মার্ট কাজ করলাম:
index.js
ফাইলে সব utility function একত্রে import এবং export করলাম।- এখন এক লাইনে সব ফাংশন access করা সম্ভব হলো।
const { add, subtract, multiply } = require('./utils')
✨ সুবিধাসমূহ:
- ✅ কোড পরিষ্কার হলো
- ✅ import গুলো সুন্দরভাবে organize হলো
- ✅ এক লাইনে সব ফাংশন access করা গেল
- ✅ কোড এখন বেশি maintainable