Command Palette

Search for a command to run...

নোড জেএস মডিউল সিস্টেম কি? নোড জেএস মডিউল সিস্টেম কেন?
fsmdeveloper
fsmdeveloper
·18 min read

নোড জেএস মডিউল সিস্টেম কি? নোড জেএস মডিউল সিস্টেম কেন?

নোড জেএস মডিউল সিস্টেম কি? নোড জেএস মডিউল সিস্টেম কেন?

হ্যালো বন্ধুরা, কেমন আছেন সবাই? আশা করছি সবাই ভালই আছেন। আমি ধরেই নিচ্ছি যে আপনি একজন ব্যাকএন্ড ডেভেলপার হতে চাচ্ছেন, তাই এখানে এসেছেন!

যারা ব্যাকএন্ড এবং ফ্রন্টএন্ড সম্পর্কে কিছুই জানেন না তাদের জন্য সংক্ষেপে কিছু বলতে চাই।

প্রত্যেকটি ওয়েবসাইট বা অ্যাপ্লিকেশন এর ২ টি পার্ট থাকে। একটি হচ্ছে ফ্রন্ট এন্ড এবং আরেকটি হচ্ছে ব্যাক এন্ড। ফ্রন্ট এন্ড হচ্ছে ইউজার ইন্টারফেস যা আপনি দেখতে পান আপনার মোবাইলের অ্যাপ্লিকেশন অথবা ব্রাাউজার এ। আর ব্যাক এন্ড হচ্ছে এর ব্রেইন যা আপনি দেখতে পান না কিন্তু উপলব্ধি করতে পারেন।

ইউজার ইন্টারফেস এর যাবতীয় লজিক গুলো থাকে ব্যাক এন্ড এর মধ্যে। এক কথায় বলতে গেলে আপনার ব্রেইন যেমন আপনাকে নির্দেশনা দিয়ে থাকে কখন কি করতে হবে, ঠিক তেমনি একটি ওয়েবসাইট বা সফটওয়্যার কে নির্দেশনা দিয়ে থাকে ব্যাক এন্ড। ব্যাক এন্ড নির্ধারণ করে কখন কি দেখাতে হবে একটি ওয়েবসাইটে বা অ্যাপ্লিকেশন এ। আশা করছি ব্যাক এন্ড এবং ফ্রন্ট এন্ড সম্পর্কে কিছুটা হলেও আপনার মধ্যে ধারনা এসেছে। আর যদি এখনো কিছু বুঝতে না পারেন তাহলে চিন্তার কোন কারন নেই। নোড জেএস এর সাথে থাকলে সব বুঝে যাবেন আস্তে আস্তে।

নোড জেএস শেখার সময় অনেকেই এরর বা প্রবলেম ফেইস করতে পারেন, তার জন্য প্রবলেম নিয়ে কখনোই বসে থাকবেন না। প্রবলেম নিয়ে যতই বসে থাকবেন ততই প্রবলেম আপনাকে ঘিরে ধরবে। তাই যখন যে প্রবলেম ফেইস করবেন তখনই সেই বিষয়ে Google, Github, Stackoverflow তে সার্চ করবেন, কেননা আপনিই প্রথম ব্যক্তি নয় যে এই প্রবলেম এ পড়েছে। আপনার আগে বহু ডেভেলপার এই প্রবলেম এ পড়েছে এবং এই সাইট গুলো তে অভিজ্ঞ ডেভেলপার রা সলিউশন দিয়ে রেখেছে। আপনার উচিত হবে সেখান থেকে আপনার প্রবলেম এর সলিউশন খুজে বের করা। আর যদি একেবারেই কোন সাহায্য না পান ওয়েবসাইট গুলো থেকে তাহলে আমার সাথে যোগাযোগ করতে পারেন, আমি চেষ্টা করবো আপনাকে সাহায্য করার।

অনেক তো প্যাঁচাল হল, এখন আপনি তৈরী তো নোড জেএস শেখার জন্য? যদি তৈরী হয়ে থাকেন তাহলে প্রথমেই আপনার জন্য ফরজ কাজ টি হচ্ছে আপনার পিসি তে নোড জেএস ইন্সটল করা। নোড জেএস ডাউনলোড করার জন্য এখানে ক্লিক করুন।

নিচের স্ক্রীনসট টি দেখুন।

Techdiary: article-image

নোড জেএস এর অফিসিয়াল ওয়েবসাইট এ যাওয়ার পর আপনি ২ টি ভার্সন দেখতে পাবেন। একটি হচ্ছে LTS (Long Term Support) ভার্সন আরেকটি হচ্ছে Current ভার্সন। আপনি LTS ভার্সন টা ডাউনলোড করে পিসি তে ইন্সটল করবেন। কিভাবে ইন্সটল করতে হবে তা নিশ্চয়ই বলে দিতে হবে না?

ধরেই নিচ্ছি যে আপনার পিসি তে সম্পন্ন ভাবে নোড জেএস ইন্সটল করেছেন। যদি সন্দেহ থেকে থাকে তাহলে আপনার পিসির CMD বা GIT BASH ওপেন করে টাইপ করুন নিচের কমান্ড টি এবং এন্টার চাপুন।

node -v

যদি আউটপুট হিসেবে নোড এর ভার্সন দেখায় তাহলে ১০০% সিউর যে আপনার পিসি তে নোড ইন্সটল হয়েছে। নীচের স্ক্রিনশট এর মত আসবে।

Techdiary: article-image

আমাদের প্রথম ধাপ সম্পন্ন হয়েছে, দ্বিতীয় ধাপ টি হচ্ছে কোড লেখার জন্য আমাদের একটি ভাল কোড এডিটর লাগবে। আমি আপনাকে হাইলি রিকমেন্ড করবো Visual Stuido Code ব্যাবহার করতে। কারন এটা ফ্রি এবং ইউজার-ফ্রেইন্ডলি। এটা আমার একমাত্র পছন্দের এডিটর। সবসময় আমি এটা ব্যাবহার করে থাকি। আপনি চাইলে যেকোনো এডিটর ব্যাবহার করতে পারেন। VS CODE ডাউনলোড করার জন্য এখানে ক্লিক করুন এবং ইন্সটল করে নিন।

এখন তাহলে আমরা কাজ শুরু করতে পারি কারন আমাদের ডেভেলপমেন্ট Environment Setup সম্পন্ন হয়েছে।

Node Module System

আজকে আমরা শিখবো Node Module System! নোড জে এস কে ভালভাবে বুঝতে হলে সবার আগে আমাদের এর Module System সম্পর্কে স্পষ্ট ধারনা থাকা দরকার! তাই আজকে আমি Node Module System কি , কেন এবং কিভাবে কাজ করে সে বিষয়ে আলোকপাত করবো।

আমরা জানি যে জাভাস্ক্রিপ্ট তৈরী করা হয়েছিলো শুধু ব্রাউজার এর জন্য এবং তা ছিল একটি ওয়েব পেজ কে ইনটারেক্টিভ করার জন্য। কিন্তু এখন আমরা নোড এর মাধ্যমে জাভাস্ক্রিপ্ট দিয়ে সার্ভার তৈরী করা শুরু থেকে অনেক কিছুই করতে পারি। লক্ষ্য করার বিষয় হচ্ছে দুই জায়গা তেই জাভাস্ক্রিপ্ট ব্যাবহার করা হলেও এদের মধ্যে কিন্তু কিছু ভিন্নতা রয়েছে। ব্রাউজার কাজ করে window অবজেক্ট নিয়ে আর নোড জেএস কাজ করে global অবজেক্ট নিয়ে।

window অবজেক্ট এর কাজ হচ্ছে ব্রাউজার নিয়ে কাজ করা আর global অবজেক্ট এর কাজ হচ্ছে ফাইল সিস্টেম নিয়ে কাজ করা, অর্থাৎ আপনি কোন অপারেটিং সিস্টেম ব্যাবহার করছেন, কত জিবি র‍্যাম আপনার পিসি তে ইন্সটল করা আছে , এছাড়াও যাবতীয় তথ্য জানার ক্ষমতা নোড জেএস রাখে। অপরদিকে উইন্ডো অবজেক্ট এর কিন্তু সরাসরি এই ধরনের ক্ষমতা নেই বললেই চলে। তাহলে সারাংশ কি দাড়ালো? নোড জেএস এ window অবজেক্ট বলতে কিছু নেই, বরং নোড এর রয়েছে global অবজেক্ট।

কোড করার সময় হয়ে গেছে এবং আমার সাথে সাথে আপনি ও কোড করার চেষ্টা করুন। মনে রাখবেন আপনি যতই টিউটোরিয়াল ফলো করুন না কেন, নিজে নিজে যদি সেটা করার চেষ্টা না করেন তাহলে খুব শীঘ্রই সেটা ভুলে যাবেন। আর যদি সাথে সাথেই সেই বিষয় টা নিয়ে একটু চর্চা করেন তাহলে সেটা আপনার মাথায় গেথে যাবে বহু বছরের জন্য।

যাই হোক প্রথমে আমি একটি ফোল্ডার তৈরী করবো node-module নামে। (আপনি যেকোনো নাম ব্যাবহার করতে পারেন) তারপর সেই ফোল্ডার এর মধ্যে একটি ফাইল তৈরী করবো app.js নামে। (ফাইল এর extentions কিন্তু অবশ্যই .js হতে হবে)

তারপর আমরা এই ফোল্ডার টিকে Visual Studio Code দিয়ে ওপেন করবো। ওপেন করার পর আমরা app.js এর মধ্যে কোড লিখতে পারবো। ঐতিহ্য বজায় রাখার জন্য আমরা "Hello World" দিয়ে কোড লেখা শুরু করতে পারি।

console.log('Hello World!');

app.js এর মধ্যে থাকা কোড রান করার জন্য আমাদের একটি কমান্ড চালাতে হবে। node (স্পেস) ফাইল এর নাম। তাহলে আমাদের চালাতে হবে নিচের কমান্ড টি।

node app.js

(এখানে আমি VS CODE এর ইন্ট্রেগেটেড টার্মিনাল ব্যাবহার করছি এবং পুরো কোর্স জুড়ে আমি এটাই ব্যাবহার করবো, CTRL+` চাপলেই ইন্ট্রেগেটেড টার্মিনাল ওপেন হয়ে যাবে)

কমান্ড দেওয়ার পর app.js রান হল এবং আমাদের আউটপুট দিল "Hello World!"

Techdiary: article-image

আমাদের প্রথম প্রোগ্রাম টি আমরা সফল ভাবে রান করতে পেরেছি।

আবারো কোড করার আগে কিছু ব্যাপার জেনে নেওয়া যাক।

নোড এর ভাষায় অ্যাপ্লিকেশান এর মধ্যে থাকা প্রত্যেকটি ফাইলকে বলা হয় এক একটি Module. একটি ফাইল বা Module এর মধ্যে যদি ভেরিএবল বা মেথড ডিফাইন করা হয়, তাহলে শুধুমাত্র সেই Module ই সেগুলোর অ্যাক্সেস পাবে, বাকি Module গুলো সাধারণভাবে এর কোন অ্যাক্সেস পাবে না, কারন একটি Module এর মধ্যে ভেরিএবল বা মেথড ডিফাইন করার পর সেগুলো গ্লোবাল স্কোপ এর মধ্যে থাকে না, যার কারনে অন্য ফাইল বা Module সাধারণত এগুলোর অ্যাক্সেস পায় না।

গ্লোবাল স্কোপ এর মধ্যে থাকা কিছু মেথড হল console.log(), setTimeout(), SetInterval() ইত্যাদি। যেহেতু এগুলো গ্লোবাল স্কোপ এর মধ্যে থাকে তাই যেকোনো Module বা ফাইল থেকে আমরা এই মেথড গুলো সহজেই ব্যাবহার করতে পারি। এখন কথা হচ্ছে আমরা কি তাহলে এক Module এর জিনিস আরেক Module এ ব্যাবহার করতে পারবো না???????

কে বলেছে পারবেন না? অবশ্যই পারবেন, হাজার বার পারবেন। তবে এর জন্য নোড জেএস এর কিছু নিয়ম কানুন রয়েছে। নোড জেএস এর কাছে রয়েছে Import & Export system যা ব্যাবহার করে আপনি এক Module এর জিনিস আরেক Module এ সহজেই ব্যাবহার করতে পারবেন।

তাহলে চলুন দেখা যাক কিভাবে কাজ করে নোড Module এর Import & Export system!

এখন Root ফোল্ডার এ আমরা আরেকটি ফাইল তৈরী করবো person.js নামে।

প্রত্যেকটি ফাইল বা Module এর কাছে রয়েছে একটি করে নিজস্ব Module অবজেক্ট! চলুন আগে দেখা যাক এই Module অবজেক্ট এর ভিতরে আসলে কি কি থাকে! এই module অবজেক্ট টি global অবজেক্ট এর একটি অবজেক্ট, তাই আমরা এটা যেকোনো ফাইল থেকে অ্যাক্সেস পাবো। Module অবজেক্ট এর মধ্যে কি কি আছে তা চেক করার জন্য আমাদের Module অবজেক্ট টিকে console.log() করতে হবে।

console.log(module);

ফাইল রান করার জন্য কোন কমান্ড টি ব্যাবহার করতে হবে তা নিশ্চয়ই মনে আছে? হ্যাঁ ঠিক ধরেছেন, node (স্পেস) ফাইল এর নাম।

রান করার পর আপনি অনেক কিছু দেখতে পাবেন, ভয় পাবেন না, আপনি শুধু Exports অবজেক্ট টির দিকে লক্ষ্য করুন, বাকি গুলোর মধ্যে আপাতত তাকানোর দরকার নেই। নিচের স্ক্রিনশট টি দেখুন।

Techdiary: article-image

module অবজেক্ট এর মধ্যে exports নামে একটি খালি অবজেক্ট পাওয়া গেলো। এখন আমরা person.js এর মধ্যে person নামে একটি অবজেক্ট তৈরী করবো।

const person = {
  name: 'Sm Shohag',
  age: 20,
  username: 'FsmDeveloper'
}

module.exports = person;

console.log(module);

বলে রাখা ভালো যে আমরা এই কোর্স জুড়ে মডার্ন জাভাস্ক্রিপ্ট ব্যাবহার করবো, অর্থাৎ ES6, ES7 এর Syntext ব্যাবহার করবো।

এখানে আমরা প্রথমে person নামে একটি ভেরিএবল তৈরী করলাম এবং সেখানে অবজেক্ট হিসেবে কিছু ডেটা রাখলাম। তারপর সেই person অবজেক্ট টিকে module এর মধ্যে থাকা exports অবজেক্ট এর মধ্যে Push করে দিলাম। তারপর আমরা আবারো module অবজেক্ট টিকে console.log() করলাম এর বর্তমান অবস্থা দেখার জন্য।

নিচের স্ক্রিনশট এর দিকে লক্ষ্য করুন।

Techdiary: article-image

কি দেখতে পাচ্ছেন? এখন আমরা দেখতে পাচ্ছি যে exports অবজেক্ট এর মধ্যে আমাদের তৈরী করা person অবজেক্ট এর ডেটা গুলো চলে এসেছে, কারন আমরা module.exports অবজেক্ট এর ভিতরে person অবজেক্ট টিকে Push করেছিলাম।

এখন আমরা এই module এর ডেটা অন্য module থেকে অ্যাক্সেস পাবো Import করার মাধ্যমে। আপনি শুধু মাত্র অবজেক্ট নয়, যেকোনো কিছু Export করে পারেন যেমন মেথড, ভেরিএবল ইত্যাদি।

Export কিভাবে করতে হয় সেটা আমরা জানলাম, এখন দেখে নেওয়া যাক Export করা ডেটা কে অন্য module বা ফাইল এর মধ্যে কিভাবে import করে ব্যাবহার করতে হয়।

আমরা এখন চলে যাবো আবারো app.js এর মধ্যে।

নোড জেএস এর মধ্যে Import করতে গেলে আমাদের একটি মেথড কল করতে হয়।

require('এখানে হবে module এর নাম বা পাথ সহ ফাইল এর নাম এবং অবশ্যই কোন ধরনের extention ছাড়া');

নিচের কোড এর দিকে লক্ষ্য করুন। বোঝার চেষ্টা করুন এখানে কি হচ্ছে।

const personInfo = require('./person');

console.log(personInfo);

কিছু বুঝতে পারলেন? আমরা এখানে একটি ভেরিএবল নিলাম personInfo নামে (আপনি যেকোনো নাম ব্যাবহার করতে পারেন) এবং সেই ভেরিএবল এর মধ্যে Import করলাম person module কে। যেহেতু দুটি module ই একি ফোল্ডার মধ্যে রয়েছে তাই আমরা ./person ডট এবং স্লেস দিয়ে বলে দিলাম বর্তমান পাথ বা ফোল্ডার এর মধ্যে আছে এই module টি, তারপর বলে দিলাম module এর নাম হচ্ছে person.

এখন আমাদের personInfo ভেরিএবল এর মধ্যে person module থেকে Export করা ডেটা চলে এসেছে। সত্যিই ডেটা এসেছে কিনা সেটা চেক করার জন্য আমরা console.log() করলাম personInfo ভেরিএবল টি কে।

এখন তাহলে আউটপুট দেখা যাক। নিচের স্ক্রিনশট এর দিকে লক্ষ্য করুন।

Techdiary: article-image

app.js রান করার পর আমরা আউটপুট পেলাম সেই অবজেক্ট টিকে যেটা আমরা person module এর মধ্যে তৈরী করে Export করেছিলাম। এখন বুঝতে পারছেন তো ব্যাপার টা কি ঘটলো? এখন আমরা চাইলে এই অবজেক্ট টি ব্যাবহার করতে পারি এই app module এর মধ্যে। মনে রাখবেন যদি আপনি অন্য একটি module এর অ্যাক্সেস পেতে চান তাহলে অবশ্যই আপনাকে প্রথমে সেই নির্দিষ্ট module টি Import করে নিতে হবে, আর কিভাবে Import করতে হয় সেটা ইতোমধ্যেই জেনেছেন।

এখন আমরা চাচ্ছি person অবজেক্ট এর username property এর অ্যাক্সেস নিতে। এখন এর অ্যাক্সেস নিতে আমাদের কি করতে হবে? চেষ্টা করুন, দেখুন নিজে নিজে পারেন কিনা!

username property এর অ্যাক্সেস নিতে আমাদের সাহায্য নিতে হবে personInfo ভেরিএবল এর, কেননা এর মধ্যেই এখন রয়েছে person অবজেক্ট টি।

নিচের স্ক্রিনশট এর দিকে লক্ষ্য করুন।

Techdiary: article-image

personInfo এর সাথে ডট . ব্যাবহার করলেই VS CODE এর Intellisense এর মাধ্যমে আমাদের দেখাচ্ছে এর মধ্যে কি কি property রয়েছে। কি মজার ব্যাপার তাই না?

এখন app module টি রান করলে আমরা নিচের আউটপুট টি দেখতে পাবো।

Techdiary: article-image

এখন নিশ্চয়ই বাকি property গুলোর অ্যাক্সেস ও নিতে পারবেন তাই না? চেষ্টা করে দেখুন।

তাহলে আমরা আজকে Node Module System সম্পর্কে জানলাম! এখন জেনে নেওয়া যাক কেন নোড জেএস এর মধ্যে এই Modularity সিস্টেম রয়েছে এবং কিভাবে আমাদের এটা সাহায্য করে থাকে।

Node Module System কেন?

সাধারণত ফ্রন্ট এন্ড বা ব্রাউজার এর জাভাস্ক্রিপ্ট এর মধ্যে একটি ভেরিএবল বা মেথড ডিফাইন করলে সেটা window অবজেক্ট এর মধ্যে গ্লোবাল অবস্থায় থাকে, ফলে window অবজেক্ট এর মাধ্যমে সেটা যেকোনো জায়গায় থেকে অ্যাক্সেস নেওয়া যায়। এর কিছু খারাপ দিক রয়েছে। ধরুন আপনি একটি ফাইল এর মধ্যে message নামে ভেরিএবল ডিফাইন করলেন। পরে আপনি ভুল বশত ঠিক একই নামে আরেকটি ভেরিএবল ডিফাইন করলেন অন্য একটি ফাইল এ!

এখন কি হবে? আগের message এর ডেটা অভাররাইট করে বর্তমান ডাটা বসে যাবে message ভেরিএবল এ, যেটা পরবর্তীতে আপনার প্রোজেক্ট এ অনেক পোকা (Bug) সৃষ্টি করবে। এই সমস্যা যাতে না হয় তাই নোড এর মধ্যে Node Module System টি রয়েছে। নোড এ আপনি বিভিন্ন module এর ভিতরে একই নামে মেথড, প্রপোপার্টি, অবজেক্ট ইত্যাদি তৈরী করতে পারবেন। এগুলো নাম এক হলেও একটি আরেকটি থেকে আলাদা, কারন এগুলো গ্লোবাল স্কোপ এর মধ্যে থাকবে না। যখন যে Module এর জিনিস ব্যাবহার করতে হবে সেটা Import করেই ব্যাবহার করতে পারবেন কোন ধরনের বাগ এবং ঝামেলা ছাড়াই। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর মধ্যেও প্রায় একই ধরনের কনসেপ্ট ব্যাবহার করা হয়েছে।

Node Module এর আরো অনেক কিছু জানার আছে, সেগুলো আমরা পরের পার্ট এ জানবো। সামনে আমরা নোড এর বিল্ট ইন Modules গুলো ব্যাবহার করা শিখবো।

এই পুরো কোর্স জুড়ে আমরা একটু একটু করে স্টেপ বাই স্টেপ এগোবো এবং শিখবো নোড জেএস বেসিক থেকে এডভান্স পর্যন্ত।

সোর্স কোড

এই কোর্সের মধ্যে থাকা প্রত্যেকটি পার্ট এর জন্য ব্যাবহার করা সোর্স কোড আমার Github প্রোফাইল এ পেয়ে যাবেন।

আজকের পার্ট এর সোর্স কোড পেতে এখানে ক্লিক করুন।

কিছু কথা

তো ভাই/আপুরা কেমন লাগলো আজকের টিউটোরিয়াল? যদি ভালো লেগে থাকে তাহলে অবশ্যই আপনার বন্ধুদের সাথে শেয়ার করবেন।

নিচে মন্তব্য করার জন্য কমেন্ট বক্স রয়েছে, সেখানে আপনার কিছু বলার থাকল লিখতে পারেন। (লিখলে খুসিই হবো)

তাহলে আজকের মত এখানেই বিদায় নিচ্ছি। এত কষ্ট করে টিউটোরিয়াল পড়ার জন্য আপনাকে অসংখ্য ধন্যবাদ। 😁😊😍

ভালো থাকবেন, সুস্থ থাকবেন।

Happy Coding <>

এই টিউটোরিয়াল টি প্রথম প্রকাশিত হয় আমার পার্সোনাল ব্লগ FsmDeveloper.Tech সাইটে! ঘুরে আসার জন্য অনুরোধ করা হলো!

Comments

  • Type and hit enter to post comment
  • For multiline comments, use Shift + Enter
  • You can use markdown syntax for formatting

Cookie Consent

We use cookies to enhance your browsing experience and analyze our traffic. By clicking "Accept", you consent to our use of cookies.