একটি বাস্তব প্রোগ্রাম কখনো একটি বিশাল ফাইল হয় না। Node.js আপনাকে মডিউল নামের আলাদা ফাইলে কোড ভাগ করতে দেয়, আর require() দিয়ে এক ফাইল থেকে অন্য ফাইলে অংশ টেনে আনতে দেয়। এটিই CommonJS — Node-এর মূল, এখনো অনেক প্রচলিত মডিউল সিস্টেম।
Node.js-এ, প্রতিটি .js ফাইল স্বয়ংক্রিয়ভাবে একটি আলাদা মডিউল হিসেবে wrap হয়। একটি ফাইলে ঘোষিত ভেরিয়েবল আর ফাংশন ডিফল্টভাবে সেই ফাইলের জন্য ব্যক্তিগত — অন্য একটি ফাইল সেগুলো দেখতে পায় না যতক্ষণ না প্রথম ফাইলটি ইচ্ছাকৃতভাবে সেগুলো শেয়ার করে।
অন্য একটি ফাইল ব্যবহার করতে পারবে এমন যেকোনো কিছু module.exports-এর সাথে যুক্ত করুন:
// math.js
function add(a, b) {
return a + b
}
function multiply(a, b) {
return a * b
}
module.exports = { add, multiply }অন্য একটি ফাইল require() দিয়ে সেটি টেনে আনে, ফাইলের একটি পাথ দিয়ে (এই একই ফোল্ডারে "থাকার জন্য ./ দিয়ে শুরু):
// app.js
const { add, multiply } = require('./math')
console.log(add(2, 3)) // 5
console.log(multiply(2, 3)) // 6লক্ষ্য করুন require() কলে কোনো .js এক্সটেনশন নেই — পাথে ইতিমধ্যে একটি না থাকলে Node স্বয়ংক্রিয়ভাবে সেটি যোগ করে।
একটি ফাইলে যদি শেয়ার করার মতো শুধু একটি জিনিস থাকে, তাহলে সেটিকে একটি অবজেক্টে না মুড়িয়ে সরাসরি এক্সপোর্ট করতে পারেন:
// greet.js
module.exports = function greet(name) {
return `Hello, ${name}!`
}
// app.js
const greet = require('./greet')
console.log(greet('Priya'))Node-এ আগে থেকেই তৈরি মডিউলও থাকে — আপনি সেগুলো ফাইল পাথের বদলে নাম দিয়ে require() করেন, কোনো ইনস্টলেশনের প্রয়োজন নেই:
const path = require('path')
console.log(path.extname('photo.png')) // '.png'পরবর্তী বেশ কয়েকটি পাঠ এই বিল্ট-ইন মডিউলগুলোর মধ্যে সবচেয়ে কাজের কিছু একে একে কভার করে।
মডিউল ক্যাশ করা থাকে
একই মডিউল দুইবার require করলে এর কোড দুইবার চলে না — প্রথম require()-এর পর Node ফলাফল ক্যাশে রাখে আর সেটি পুনরায় ব্যবহার করে। এটি গুরুত্বপূর্ণ হয়ে ওঠে যখন আপনি ফাইলগুলোর মধ্যে অবস্থা, যেমন একটি ডেটাবেস সংযোগ, শেয়ার করা শুরু করেন।