সরাসরি পর্বে যান
পর্ব ০৩ · ৫৯-এর মধ্যে · মডিউল ১

সেটআপ — browser console, Node.js আর VS Code

Setting Up — Browser DevTools, Node.js, VS Code & Your First Debugging Session

Taught in Bangla, this lesson sets up a JavaScript workspace: the browser console and DevTools, useful console methods, installing Node.js LTS with an installer or version manager, the Node REPL and running files, organising a first VS Code project, catching a typo with breakpoints, online playgrounds and keeping one Node version across a team.

এই পর্বে যা শিখবেন

  • Browser console-কে একটি তাৎক্ষণিক পরীক্ষাগার (REPL) হিসেবে ব্যবহার করা — আর echo বনাম log-এর পার্থক্য
  • Node.js-এর LTS আর Current-এর মধ্যে বেছে নেওয়া, ইনস্টল করা আর node -v দিয়ে যাচাই করা
  • node app.js চালালে ভেতরে ধাপে ধাপে কী ঘটে, আর প্রোগ্রাম কখন শেষ হয়
  • VS Code-এ প্রথম project খোলা, আর breakpoint বসিয়ে একটি বানান-ভুল খুঁজে বের করা
  • টিমে সবার কম্পিউটারে একই Node version রাখার অভ্যাস, আর AI-এর দেওয়া সেটআপ-নির্দেশ যাচাইয়ের চেকলিস্ট

১ · JavaScript লিখতে আসলে কী কী লাগে

Python বা Java শিখতে গেলে প্রথম দিনেই কিছু একটা ডাউনলোড করতে হয়। JavaScript এখানে ব্যতিক্রম। আপনি এই পাতাটি যে browser-এ পড়ছেন, তার ভেতরেই একটি পূর্ণাঙ্গ JavaScript engine বসানো আছে — Chrome ও Edge-এ V8, Firefox-এ SpiderMonkey, Safari-তে JavaScriptCore. অর্থাৎ JavaScript শেখা শুরু করতে নতুন কিছুই ইনস্টল করতে হয় না।

তাহলে Node.js আর VS Code কেন? কারণ তিনটি জিনিস তিনটি আলাদা কাজ করে। একটি চায়ের দোকানের কথা ভাবুন: চুলা ছাড়া চা হয় না, কিন্তু চুলা দোকানেও থাকতে পারে, বাসাতেও। আর ভালো কেতলি থাকলে কাজ দ্রুত ও পরিষ্কার হয়।

Browser

Engine + DevTools. ওয়েবপাতার ভেতরে JavaScript চালায়; button, form, পাতার লেখা বদলানো — সব এখানে। শেখার প্রথম দিনের জন্য যথেষ্ট।

Chrome, Edge, Firefox, Safari

Node.js

Browser ছাড়াই JavaScript চালানোর runtime. ফাইল পড়া, সার্ভার বানানো, টুল চালানো — এসবের জন্য। সাথে আসে npm.

node, npm

Editor

কোড লেখার খাতা। রং করে দেখায়, ভুলের নিচে দাগ দেয়, terminal আর debugger পাশে রাখে। নিজে কোড চালায় না।

VS Code
মূল ধারণা

JavaScript একটি ভাষা; সেটি চলে কোনো একটি পরিবেশে। Browser একটি পরিবেশ (সাথে দেয় document, window), Node.js আরেকটি পরিবেশ (সাথে দেয় process, fs). ভাষার নিয়ম দুই জায়গায় এক, কিন্তু হাতের কাছে পাওয়া সুবিধা আলাদা। পর্ব ০২-এ দেখা HTML-CSS-JavaScript-এর ভাগাভাগি মনে রাখলে এটি সহজেই মিলে যাবে।

নাদিয়া রংপুরের একটি কলেজে পড়েন, হাতে একটি পুরোনো ৪ GB RAM-এর ল্যাপটপ আর মাসে সীমিত মোবাইল ডেটা। তাঁর প্রশ্ন: “ভারী সফটওয়্যার ছাড়া কি JavaScript শেখা যাবে?” উত্তর — হ্যাঁ, পুরোপুরি। Browser তো আছেই। Node.js-এর installer কয়েক দশ MB, VS Code-ও তুলনামূলক হালকা। কোনো ভারী IDE বা দামি লাইসেন্স লাগে না। এই পর্বের সব ধাপ নাদিয়ার মতো সাধারণ কম্পিউটার মাথায় রেখেই সাজানো।

২ · Browser console — হাতের কাছের পরীক্ষাগার

DevTools হলো browser-এর ভেতরে ডেভেলপারদের জন্য রাখা একগুচ্ছ টুল। খোলার উপায়:

কম্পিউটারশর্টকাটসরাসরি Console
Windows / LinuxF12 বা Ctrl+Shift+ICtrl+Shift+J (Chrome/Edge)
macOSCmd+Option+ICmd+Option+J (Chrome/Edge)
যেকোনো জায়গায়পাতায় ডান-ক্লিক → Inspectতারপর Console ট্যাব

Console ট্যাবটি একটি REPL — Read, Eval, Print, Loop. আপনি একটি লাইন লেখেন, সে পড়ে, হিসাব করে, ফল দেখায়, তারপর আবার অপেক্ষা করে। এখানে একটি সূক্ষ্ম কিন্তু খুব গুরুত্বপূর্ণ ব্যাপার আছে: console প্রতিটি লাইনের মান নিজে থেকেই দেখায় (echo), আর console.log যা ছাপে সেটি আলাদা জিনিস। নিচের সেশনটি ধাপে ধাপে দেখুন:

1> 2 + 32> console.log("Hi")3> let x = 104> x * 25> $_ + 16> console.clear()
Console যা মনে রাখছে
x
$_
  1. একটি expression. 2 + 3 লিখে Enter চাপলেন। Console হিসাব করে মানটি দেখাল ← 5. এখানে কেউ কিছু “ছাপেনি” — এটি console-এর নিজের echo. Chrome/Edge-এ Enter চাপার আগেই নিচে ধূসর রঙে ফলের আভাস দেখায় (eager evaluation).
  2. log বনাম echo. console.log("Hi") দুটি লাইন দিল: Hi হলো log-এর ছাপা লেখা, আর ← undefined হলো পুরো লাইনটির মান। console.log কিছু ফেরত দেয় না, তাই মান undefined. নতুনরা এই undefined দেখে ভাবেন কিছু ভুল হয়েছে — হয়নি।
  3. Declaration-এর মানও undefined. let x = 10 একটি statement, expression নয় — তাই echo-তে আবার undefined. কিন্তু x এখন মনে রাখা হয়েছে; পরের লাইনগুলোতে ব্যবহার করা যাবে।
  4. আগের মান ব্যবহার। x * 2 দিল ← 20. একাধিক লাইনের কোড লিখতে চাইলে প্রতিটি লাইনের শেষে Shift+Enter চাপুন — তাহলে Enter-এ চলে না গিয়ে নতুন লাইন হয়।
  5. $_ — শেষ ফল। Chrome, Edge ও Firefox-এর console-এ $_ মানে “সবশেষ হিসাব করা মান”। তাই $_ + 1 = 21. এটি শুধু DevTools-এর সুবিধা, JavaScript ভাষার অংশ নয় — আপনার ফাইলে লিখলে চলবে না।
  6. পরিষ্কার করা। console.clear(), অথবা Ctrl+L (macOS-এ Cmd+K), অথবা Console-এর 🚫 বোতাম। স্ক্রিন পরিষ্কার হলো, কিন্তু x এখনো আছে — পাতা reload করলে তবেই সব মুছে যায়।

Console-এ লেখা কোড যে পাতা খোলা আছে, সেই পাতার ভেতরে চলে। কোনো ওয়েবসাইটে কেউ যদি বলে “এই কোডটি console-এ পেস্ট করুন, ফ্রি অফার পাবেন” — করবেন না। এভাবে আপনার লগইন করা অ্যাকাউন্টের তথ্য চুরি হতে পারে (একে self-XSS বলে)। এজন্যই সাম্প্রতিক Chrome নতুন ব্যবহারকারীকে console-এ প্রথমবার পেস্ট করার আগে সতর্কবার্তা দেখায়। পরীক্ষার জন্য একটি ফাঁকা ট্যাব (about:blank) খুলে নিন।

৩ · console-এর কাজের method আর এই কোর্সের runner

console.log ছাড়াও console object-এ আরও কয়েকটি method আছে, যা ডেটা দেখতে খুব কাজে লাগে:

Methodকাজ
console.log(a, b, c)একাধিক মান কমা দিয়ে দিলে, মাঝে space রেখে এক লাইনে ছাপে
console.info / warn / errorএকই কাজ, কিন্তু DevTools-এ আলাদা রং ও ফিল্টার — warn হলুদ, error লাল
console.table(arr)object-এর array-কে সারি-কলামের টেবিলে দেখায়
console.group("নাম") … console.groupEnd()মাঝের log-গুলোকে ভাঁজ করা যায় এমন একটি দলে রাখে

এই কোর্সের প্রতিটি পর্বে “চালান” বোতামওয়ালা কোড বক্স আছে। JS লেখা বক্সগুলো আপনার browser-এর ভেতরেই একটি আলাদা, সুরক্ষিত iframe-এ চলে — একে বলে sandbox. নিচের কোডটি চালিয়ে দেখুন:

const name = "রহিম";
const marks = 87;
console.log("নাম:", name, "নম্বর:", marks);

// কোন পরিবেশে চলছি? browser-এ window আছে, process নেই
console.log(typeof window, typeof document, typeof process);

const students = [
  { name: "রহিম", marks: 87 },
  { name: "সুমি", marks: 92 }
];
console.table(students);
console.info("মোট শিক্ষার্থী:", students.length);

প্রথম লাইনে চারটি মান space দিয়ে জুড়ে ছাপা হলো: নাম: রহিম নম্বর: 87. দ্বিতীয় লাইন object object undefined — browser-এ window আর document আছে, কিন্তু process (Node.js-এর জিনিস) নেই। তৃতীয় লাইনটি খেয়াল করুন: এই পাতার runner console.table-এর ডেটা টেবিল না এঁকে একটি মান হিসেবে ছাপে — [ { name: 'রহিম', marks: 87 }, { name: 'সুমি', marks: 92 } ]. একই কোড আসল DevTools-এ পেস্ট করলে (index), name, marks কলামসহ সত্যিকারের টেবিল দেখবেন। নিজে চেষ্টা করে পার্থক্যটি মিলিয়ে নিন।

Runner কী পারে, কী পারে না: এটি নিরাপত্তার জন্য একটি আলাদা origin-এ চলে। তাই এখানে localStorage, sessionStorage, cookie আর IndexedDB কাজ করে না (SecurityError দেয়); alert/prompt/confirm নেই; ইন্টারনেটে fetch করা যায় না; অন্য ফাইল import করা যায় না। কোনো পর্বে এগুলো দরকার হলে সেখানে বিকল্প দেখানো হবে। আর Node লেখা বক্সগুলো আমাদের সার্ভার হয়ে একটি অনলাইন Node.js 20-এ চলে।

৪ · Node.js ইনস্টল — LTS না Current, installer না version manager

Browser-এর বাইরে JavaScript চালাতে Node.js লাগে। ২০০৯ সালে Ryan Dahl Chrome-এর V8 engine-কে browser থেকে বের করে এনে তার সাথে ফাইল, নেটওয়ার্ক আর process সামলানোর ক্ষমতা জুড়ে দেন — সেটিই Node.js. আজ npm-এর প্রায় সব টুল (Vite, ESLint, Prettier, TypeScript) চলতে Node.js লাগে, তাই front-end ডেভেলপারেরও এটি দরকার।

LTS আর Current — কোনটি নেবেন

nodejs.org-এ ঢুকলে সাধারণত দুই রকম version দেখবেন:

🛡️ LTS (Long-Term Support)

দীর্ঘ সময় ধরে নিরাপত্তা ও bug-fix আপডেট পায়। বেশিরভাগ library এতে পরীক্ষিত। শেখা, চাকরির project আর সার্ভারের জন্য এটিই বেছে নিন।

প্রস্তাবিত

🧪 Current

সবচেয়ে নতুন ফিচার আগে আসে, কিন্তু সাপোর্টের মেয়াদ কম, আর কিছু package এখনো মানিয়ে নাও নিতে পারে। নতুন ফিচার পরখ করতে চাইলে।

পরীক্ষার জন্য

এতদিনের নিয়মে প্রতি বছর দুটি নতুন major version আসে (সাধারণত এপ্রিল ও অক্টোবরে), আর জোড় সংখ্যার version-গুলো (18, 20, 22…) পরে LTS হয়। তবে release-এর সূচি সময়ে সময়ে বদলায়, তাই কোন version এখন LTS তা মুখস্থ না করে প্রতিবার nodejs.org-এর release পাতায় দেখে নিন।

দুই পথ — সরাসরি installer, অথবা version manager

  1. nodejs.org থেকে LTS-এর Windows Installer (.msi) নামান — 64-bit কম্পিউটারে x64, ARM ল্যাপটপে ARM64.
  2. Installer চালান, ডিফল্ট সেটিং রেখে Next চাপুন। “Add to PATH” টিক থাকা জরুরি।
  3. ইনস্টলের পর নতুন একটি PowerShell বা Command Prompt খুলুন (পুরোনো উইন্ডো নতুন PATH চেনে না), তারপর যাচাই করুন।
  1. nodejs.org থেকে LTS-এর macOS Installer (.pkg) নামিয়ে চালান — Intel ও Apple Silicon দুটোতেই চলে।
  2. অথবা যাঁরা Homebrew ব্যবহার করেন, তাঁরা Homebrew দিয়েও ইনস্টল করতে পারেন।
  3. Terminal নতুন করে খুলে যাচাই করুন।
  1. Distro-র নিজস্ব package (apt install nodejs) প্রায়ই বেশ পুরোনো version দেয় — যাচাই না করে ভরসা করবেন না।
  2. nodejs.org-এর Download পাতায় Linux-এর জন্য দেওয়া নির্দেশ মানুন, অথবা একটি version manager ব্যবহার করুন (নিচে দেখুন)।
  3. ইন্টারনেটে পাওয়া পুরোনো PPA বা script-এর নির্দেশ চালানোর আগে দেখে নিন সেটি এখনো সক্রিয় ও অফিসিয়াল কি না।

Version manager এমন একটি ছোট টুল, যা একই কম্পিউটারে একাধিক Node version রাখতে আর এক কমান্ডে বদলাতে দেয়। জনপ্রিয় কয়েকটি (সবগুলো ফ্রি, যার যেটি সুবিধা):

টুলকোথায় চলেবৈশিষ্ট্য
nvmmacOS, Linux, WSLshell script; সবচেয়ে পুরোনো ও পরিচিত
nvm-windowsWindowsনাম মিললেও আলাদা project; কমান্ড প্রায় একই রকম
fnmWindows, macOS, LinuxRust-এ লেখা, দ্রুত; .nvmrc পড়তে পারে
VoltaWindows, macOS, Linuxproject-এর package.json-এ version “পিন” করে রাখে, ফোল্ডারে ঢুকলেই নিজে বদলায়

কোন পথ বেছে নেবেন? শুধু শিখছেন, একটিই project — সরাসরি LTS installer যথেষ্ট। একাধিক project বা চাকরির কাজ, যেখানে একেকটি একেক version চায় — version manager নিন। দুটো একসাথে ইনস্টল করলে কোন node চলছে তা নিয়ে গোলমাল হতে পারে, তাই একটি পথ বেছে নিন।

৫ · যাচাই, Node REPL আর node app.js

ইনস্টলের পর প্রথম কাজ যাচাই। নতুন একটি terminal খুলে লিখুন:

node -v
npm -v
# উদাহরণ আউটপুট — আপনার সংখ্যা আলাদা হবে
v22.12.0
10.9.0

প্রথম সংখ্যাটি Node.js-এর version, দ্বিতীয়টি npm-এর (Node-এর সাথেই আসে, তার version নম্বর আলাদা)। দেখার বিষয় একটাই: প্রথম অংশ (major) আপনি যে LTS নামিয়েছেন তার সাথে মিলছে কি না। নাদিয়া LTS নামিয়েও যদি অনেক পুরোনো একটি সংখ্যা দেখেন, বুঝতে হবে কম্পিউটারে আগের কোনো Node রয়ে গেছে এবং PATH-এ সেটি আগে আসছে। আর 'node' is not recognized এলে হয় ইনস্টল হয়নি, নয়তো terminal পুরোনো — নতুন করে খুলুন।

Node REPL — terminal-এ console

শুধু node লিখে Enter চাপলে browser console-এর মতোই একটি REPL খোলে, প্রম্পট >. এখানেও echo হয়, আর শেষ ফল থাকে _ নামে (browser-এর $_-এর মতো)। নিজস্ব কমান্ডগুলো বিন্দু দিয়ে শুরু হয়:

$ node
Welcome to Node.js v22.12.0.   ← উদাহরণ
Type ".help" for more information.
> 7 / 2
3.5
> _ * 2
7
> .help        ← সব কমান্ডের তালিকা (.editor, .load, .save …)
> .exit        ← বের হওয়া (অথবা Ctrl+C দুবার, বা Ctrl+D)

node app.js — ফাইল চালানো

REPL-এ যা লেখেন, বন্ধ করলেই হারায়। স্থায়ী কোড লেখা হয় ফাইলে। ধরুন app.js নামে একটি ফাইলে আছে কয়েকটি log আর একটি টাইমার। node app.js লিখলে ভেতরে কী ঘটে, ধাপে ধাপে দেখুন:

  1. Process শুরুnodeOS নতুন process দেয়
  2. ফাইল পড়াapp.jsdisk থেকে লেখা আনে
  3. Engine চালায়V8উপর থেকে নিচে
  4. Event looptimerবাকি কাজ শেষ করে
  5. Exitcode 0process বন্ধ
Terminalআপনি Enter চাপলেন
$ node app.js
OS: node প্রোগ্রামটি খুঁজে (PATH থেকে) নতুন process চালু করল
app.jsNode ফাইলটি পড়ল
console.log("শুরু");
setTimeout(() => console.log("টাইমার"), 100);
console.log("ফাইলের শেষ লাইন");
Outputউপর থেকে নিচে, একবারে
শুরু
ফাইলের শেষ লাইন
↑ setTimeout শুধু টাইমার “রেজিস্টার” করল, এখনো চলেনি
Output১০০ ms পরে
শুরু
ফাইলের শেষ লাইন
টাইমার
↑ event loop দেখল আর কোনো টাইমার বা কাজ বাকি নেই
Terminalপ্রম্পট ফিরে এলো
$ ← process শেষ, exit code 0 মানে “সফল”
  1. Process শুরু। আপনি node app.js লিখলেন। Operating system PATH-এর তালিকা ধরে node প্রোগ্রামটি খুঁজে পেল এবং একটি নতুন process চালু করল। app.js হলো সেই প্রোগ্রামকে দেওয়া argument.
  2. ফাইল পড়া। Node working directory থেকে app.js খুঁজে তার লেখা পড়ল। ফাইল না পেলে এখানেই Cannot find module error দিয়ে থেমে যেত — তাই terminal সঠিক ফোল্ডারে আছে কি না আগে দেখুন।
  3. Engine চালায়। V8 কোডটি parse করে উপর থেকে নিচে চালাল। setTimeout টাইমারটি সাথে সাথে চালায় না — শুধু Node-কে বলে রাখে “১০০ ms পরে এটি চালিও”। তাই “ফাইলের শেষ লাইন” আগে ছাপা হলো।
  4. Event loop খালি করা। ফাইলের শেষে পৌঁছেও Node বন্ধ হয় না, কারণ একটি টাইমার বাকি। Event loop অপেক্ষা করে, সময় হলে callback চালায় — “টাইমার” ছাপা হলো। এর বিস্তারিত পর্ব ৩১-এ দেখবেন।
  5. Exit. আর কোনো টাইমার, খোলা সার্ভার বা অপেক্ষমাণ কাজ নেই — তাই Node নিজে থেকেই process বন্ধ করল, exit code 0. একটি সার্ভার কখনো নিজে বন্ধ হয় না কারণ সে সবসময় নতুন request-এর অপেক্ষায় থাকে; সেটি থামাতে Ctrl+C চাপতে হয়।

এবার Node.js-এর নিজস্ব জিনিস একটু ছুঁয়ে দেখুন। নিচের বক্সটি সত্যিকারের Node.js 20-এ চলে:

const major = Number(process.versions.node.split(".")[0]);
console.log("Node major version:", major);
console.log("platform:", process.platform);

// browser-এর উল্টো: এখানে process আছে, window নেই
console.log(typeof window, typeof document, typeof process);

let ticks = 0;
const timer = setInterval(() => {
  ticks++;
  if (ticks === 3) clearInterval(timer);
}, 10);

process.on("exit", (code) => {
  console.log(`exit code ${code}, ticks = ${ticks}`);
});
console.log("ফাইলের শেষ লাইন — কিন্তু প্রোগ্রাম এখনো শেষ নয়");

আউটপুট: Node major version: 20, platform: linux (অনলাইন সার্ভারটি Linux-এ চলে; আপনার Windows কম্পিউটারে একই কোড দেখাবে win32, Mac-এ darwin), তারপর undefined undefined object — browser-এর ফলের ঠিক উল্টো। এরপর “ফাইলের শেষ লাইন…” ছাপা হলো, অথচ শেষ লাইন হলো exit code 0, ticks = 3. অর্থাৎ ফাইল শেষ হওয়ার পরও Node টাইমারটি তিনবার চলা পর্যন্ত অপেক্ষা করেছে, তারপর exit করেছে — ঠিক উপরের ডায়াগ্রামের ধাপ ৪ আর ৫. Patch নম্বর (যেমন 20.x.y) ইচ্ছা করেই ছাপা হয়নি, কারণ সেটি সার্ভার আপডেটে বদলায়।

ফাইল বদলালে বারবার node app.js লিখতে না চাইলে node --watch app.js চালান — ফাইল save করলেই নিজে থেকে আবার চলবে। এটি Node 18.11-এ পরীক্ষামূলকভাবে এসেছিল, আর Node 22-এ (20.13 থেকেও) স্থিতিশীল ঘোষিত হয়।

৬ · VS Code — প্রথম project সাজানো

Notepad-এও JavaScript লেখা যায়, কিন্তু একটি ভালো editor ভুল হওয়ার আগেই ধরিয়ে দেয়। VS Code (Visual Studio Code) Microsoft-এর একটি ফ্রি, open-source editor; JavaScript আর TypeScript-এর সাপোর্ট এর ভেতরেই আছে। code.visualstudio.com থেকে নামিয়ে ইনস্টল করুন (Windows-এ “Add to PATH” আর “Open with Code” অপশন টিক দিয়ে রাখা সুবিধাজনক)।

তিনটি অভ্যাস যা প্রথম দিন থেকেই রাখবেন

  1. ফাইল নয়, ফোল্ডার খুলুন। File → Open Folder. একটি project মানে একটি ফোল্ডার; VS Code তখন পুরো project চেনে, terminal-ও সেই ফোল্ডারে খোলে।
  2. Integrated terminal ব্যবহার করুন। Ctrl+` (backtick) চাপলে নিচে একটি integrated terminal খোলে — আলাদা উইন্ডো লাগে না, আর সেটি ইতিমধ্যে project ফোল্ডারে থাকে।
  3. Auto Save চালু রাখুন। File → Auto Save. Save না করা ফাইল চালিয়ে “কিছুই বদলাল না কেন” — নতুনদের সবচেয়ে সাধারণ বিভ্রান্তি।

কয়েকটি কাজের extension

Extensionকাজকখন
ESLintসন্দেহজনক কোডের নিচে দাগ দেয় — অব্যবহৃত variable, ভুল বানানের নামপর্ব ৪৬-এ বিস্তারিত
Prettiersave করলেই কোডের ফরম্যাট (indent, quote, space) এক রকম করে দেয়পর্ব ৪৬-এ বিস্তারিত
Live Server বা Microsoft-এর Live PreviewHTML পাতা একটি ছোট local server দিয়ে খোলে, save করলে পাতা নিজে reload হয়এখন থেকেই

Extension-ও এক ধরনের প্রোগ্রাম, যা আপনার কম্পিউটারে চলে। শুধু পরিচিত প্রকাশকের, অনেক ডাউনলোড আর ভালো রিভিউওয়ালা extension নিন। “ফ্রি theme” বা নকল নামের extension থেকে সাবধান — শুরুতে কম extension-ই ভালো।

প্রথম ওয়েব project — দুটি ফাইল

js-practice নামে একটি ফোল্ডার বানিয়ে VS Code-এ খুলুন, তারপর দুটি ফাইল তৈরি করুন:

<!DOCTYPE html>
<html lang="bn">
<head>
  <meta charset="UTF-8">
  <title>আমার প্রথম পাতা</title>
</head>
<body>
  <h1 id="title">স্বাগতম</h1>
  <script src="script.js"></script>
</body>
</html>
console.log("script.js লোড হয়েছে");
document.getElementById("title").textContent = "হ্যালো, ঢাকা!";

index.html ফাইলটি browser-এ খুলুন — Explorer থেকে double-click, অথবা Live Server দিয়ে। পাতায় “হ্যালো, ঢাকা!” দেখাবে, আর F12 → Console-এ দেখবেন script.js লোড হয়েছে. <script> ট্যাগটি <body>-এর একদম শেষে রাখা হয়েছে যাতে h1 আগে তৈরি হয়ে যায় — এর কারণ পর্ব ০৪-এ খুলে বলা হবে। Node.js-এর জন্য project হলে শুধু app.js বানিয়ে integrated terminal-এ node app.js চালান।

৭ · Debugging-এর শুরু — breakpoint দিয়ে বানান-ভুল ধরা

তানভীর একটি দোকানের হিসাবের ছোট function লিখলেন। দুটি পণ্যের দাম 50 আর 30, যোগফল আসার কথা 80. কিন্তু console-এ এলো NaN (Not a Number). কোনো error নেই, কোনো লাল লেখা নেই — শুধু ভুল উত্তর। এখানে console.log ছড়িয়ে দেওয়ার চেয়ে ভালো উপায় হলো breakpoint: একটি লাইনে প্রোগ্রাম থামিয়ে ভেতরের সব variable-এর মান চোখে দেখা।

Browser-এ: DevTools → Sources ট্যাব (Firefox-এ Debugger) → বাঁ দিক থেকে script.js খুলে লাইন নম্বরে ক্লিক করুন — নীল চিহ্ন বসবে। তারপর পাতা reload করুন। নিচে তানভীরের debugging সেশনটি ধাপে ধাপে দেখুন:

1function total(items) {2  let sum = 0;3  for (const item of items) {4    sum += item.prcie;5  }6  return sum;7}8console.log(total([{ price: 50 }, { price: 30 }]));
Scope ও Watch
sum
item
item.prcie
  1. Pause. লাইন ২-এ breakpoint, তাই function ডাকা হতেই প্রোগ্রাম থেমে গেল। হাইলাইট করা লাইনটি এখনো চলেনি। ডান দিকের Scope প্যানেলে sum এখনো তৈরি হয়নি।
  2. Step over (F10). লাইন ২ চলল, sum = 0. এবার লুপের মাথায়। “Step over” মানে “এই লাইনটি পুরো চালাও, ভেতরে ঢুকো না।”
  3. Variable পরীক্ষা। প্রথম item = { price: 50 }. Watch প্যানেলে item.prcie যোগ করে দেখলেন — undefined! Object-এ আছে price, কিন্তু কোডে লেখা prcie. সন্দেহ জাগল।
  4. প্রমাণ। আরেকবার step over: 0 + undefined = NaN. প্রথম লুপেই sum নষ্ট হয়ে গেল। JavaScript ভুল নামের property চাইলে error দেয় না, চুপচাপ undefined দেয় — এজন্যই error ছিল না।
  5. দ্বিতীয় ঘুর। item = { price: 30 }, কিন্তু NaN-এর সাথে যা-ই যোগ করুন, ফল NaN. একবার ঢুকে গেলে NaN আর বের হয় না।
  6. Return. লুপ শেষ, function NaN ফেরত দিতে যাচ্ছে। Call Stack প্যানেলে দেখবেন কে total-কে ডেকেছে — লাইন ৮.
  7. Resume (F8 বা ▶). প্রোগ্রাম বাকিটা চালাল, console-এ NaN. সমাধান এক অক্ষরের: prcie → price. ঠিক করে আবার চালালে 80. ESLint বা TypeScript এ ধরনের ভুল অনেক সময় আগেই ধরিয়ে দেয়।

আরও দুটি উপায় জেনে রাখুন:

  • debugger; statement: কোডের যেকোনো জায়গায় debugger; লিখলে DevTools খোলা থাকলে প্রোগ্রাম সেখানে থামে — হাতে breakpoint বসানোর মতোই। DevTools বন্ধ থাকলে এটি কিছুই করে না। কাজ শেষে মুছে ফেলতে ভুলবেন না; ESLint-এর no-debugger নিয়ম এটি মনে করিয়ে দেয়।
  • VS Code-এর debugger: লাইন নম্বরের বাঁ পাশে ক্লিক করলে লাল বিন্দু (breakpoint). Node ফাইলের জন্য Run and Debug (Ctrl+Shift+D) থেকে চালান, অথবা terminal-এর “+” মেনু থেকে JavaScript Debug Terminal খুলে সেখানে node app.js লিখুন — breakpoint-এ নিজে থেকেই থামবে। কী-বোর্ড প্রায় একই: F5 চালাও/চালিয়ে যাও, F10 step over, F11 step into.

৮ · অনলাইন playground, OS-ভেদের সমস্যা আর টিমে একই version

অনলাইন playground — দ্রুত পরীক্ষার জন্য

কোনো ধারণা দুই মিনিটে পরখ করতে, বা কাউকে কোড দেখাতে playground খুব কাজের: CodePen আর JSFiddle — HTML, CSS, JS পাশাপাশি লিখে সাথে সাথে ফল; StackBlitz — browser-এর ভেতরেই পুরো Node.js project চালাতে পারে। সীমাবদ্ধতা: ইন্টারনেট লাগে, আর পাবলিক pen-এ রাখা কোড অন্যরাও দেখতে পারে — কোনো password বা API key সেখানে রাখবেন না।

OS-ভেদে যেসব সমস্যা দেখা যায়

যা দেখছেনসম্ভাব্য কারণসমাধান
'node' is not recognized… (Windows)PATH-এ Node নেই, বা terminal পুরোনোterminal/VS Code বন্ধ করে নতুন করে খুলুন; না হলে installer আবার চালান
PowerShell-এ npm চালালে running scripts is disabled on this systemWindows-এর PowerShell execution policy .ps1 script চলতে দিচ্ছে নাCommand Prompt ব্যবহার করুন, অথবা কী বদলাচ্ছেন বুঝে শুধু নিজের অ্যাকাউন্টের জন্য policy বদলান (নিচে দেখুন)
EACCES: permission denied (macOS/Linux, global install)সিস্টেম ফোল্ডারে লেখার অনুমতি নেইsudo দিয়ে npm চালাবেন না; version manager ব্যবহার করলে এই সমস্যা হয় না
Cannot find module '…/app.js'terminal ভুল ফোল্ডারেcd দিয়ে সঠিক ফোল্ডারে যান, বা VS Code-এ ফোল্ডারটি খুলে integrated terminal ব্যবহার করুন

PowerShell-এর ব্যাপারটি একটু সাবধানে বুঝুন। Windows-এর ডেস্কটপ সংস্করণে ডিফল্ট policy সাধারণত .ps1 script চলতে দেয় না, আর npm-এর কিছু version Windows-এ npm.ps1 নামের একটি script রাখে — তাই কিছু কম্পিউটারে এই বার্তা আসে। অনেকে নিচের কমান্ডটি ব্যবহার করেন, যা শুধু আপনার নিজের অ্যাকাউন্টে স্থানীয় script চালাতে দেয় এবং ইন্টারনেট থেকে নামানো script-এর জন্য digital signature চায়:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

এটি একটি নিরাপত্তা-সেটিং বদলানো, তাই অফিসের কম্পিউটারে IT বিভাগের অনুমতি নিন। ঝুঁকি নিতে না চাইলে সহজ বিকল্প: VS Code-এর terminal-এর ধরন বদলে Command Prompt করে নিন।

টিমে সবার একই version — .nvmrc আর engines

“আমার কম্পিউটারে তো চলছে!” — টিমে কাজের সবচেয়ে পুরোনো অভিযোগ। প্রায়ই কারণ হলো ভিন্ন Node version. সমাধান: version-এর সিদ্ধান্ত মানুষের মনে না রেখে project-এর ভেতরে লিখে রাখা।

# .nvmrc ফাইলে শুধু একটি লাইন — nvm ও fnm এটি পড়ে
echo "22" > .nvmrc
nvm use        # .nvmrc দেখে সঠিক version-এ চলে যায়
{
  "name": "js-practice",
  "engines": { "node": ">=20" }
}

package.json (পর্ব ৪৬-এ বিস্তারিত) ফাইলের engines অংশ জানিয়ে দেয় project কোন Node version চায়। npm ডিফল্টভাবে মিল না হলে শুধু সতর্ক করে, থামায় না — কড়া হতে চাইলে আলাদা সেটিং লাগে। এ দুটি মিলিয়ে নতুন সদস্য প্রথম দিনেই সঠিক পরিবেশ পান।

C/C++/Python/Java জানলে

C/C++ বা Java-তে আগে compile, পরে run; JavaScript-এ সেই আলাদা ধাপ নেই — node app.js সরাসরি চালায় (engine ভেতরে JIT compile করে)। Python-এর python + IDLE/REPL বা Java-র JShell-এর জায়গায় এখানে node REPL আর browser console. Python-এর venv বা Java-র JDK version বাছাইয়ের মতোই এখানে nvm/fnm আর .nvmrc. তুলনার জন্য দেখুন Python-এর সেটআপ আর Java-র JDK সেটআপ পর্ব।

৯ · AI-এর যুগে সেটআপ — সহকারী আছে, বোঝা আপনার

VS Code-এ এখন GitHub Copilot-এর মতো AI সহকারী extension হিসেবে বসানো যায় — লিখতে লিখতে পরের লাইন প্রস্তাব করে, chat-এ প্রশ্নের উত্তর দেয়। এগুলো সত্যিই সময় বাঁচায়। কিন্তু দুটি জিনিস মাথায় রাখুন। প্রথমত, শেখার সময় প্রস্তাবটি গ্রহণ করার আগে নিজে বলতে পারছেন কি না যে লাইনটি কী করছে — না পারলে এই কোর্সের সংশ্লিষ্ট পর্ব দেখে নিন। দ্বিতীয়ত, অফিসের কোড বা গোপন তথ্য AI সার্ভিসে যাওয়ার আগে প্রতিষ্ঠানের নীতি দেখুন।

সেটআপের ক্ষেত্রে AI-এর একটি পরিচিত দুর্বলতা আছে: তার জানা তথ্য পুরোনো হতে পারে। AI হয়তো এমন একটি Node version-কে “সর্বশেষ LTS” বলবে যার সাপোর্ট শেষ হয়ে গেছে, বা Linux-এ এমন একটি পুরোনো PPA/script দেবে যা এখন আর রক্ষণাবেক্ষণ হয় না। তাই AI-এর দেওয়া install কমান্ড অন্ধভাবে কপি-পেস্ট করবেন না।

সেটআপে আটকালে AI-কে নির্দিষ্ট তথ্য দিন — OS, কী চালিয়েছেন, হুবহু কী এসেছে — আর তাকে উৎস দেখাতে বলুন:

আমি Windows 11-এ JavaScript শিখছি। nodejs.org থেকে LTS installer দিয়ে Node.js ইনস্টল করেছি। VS Code-এর PowerShell terminal-এ node -v চালালে একটি version দেখায়, কিন্তু npm -v চালালে এই মেসেজ আসে: [এখানে পুরো মেসেজটি পেস্ট করুন] ১. সমস্যাটি কেন হচ্ছে, সহজ বাংলায় বলো। ২. সবচেয়ে নিরাপদ সমাধান আগে দাও, নিরাপত্তা-সেটিং বদলানোর সমাধান পরে — আর প্রতিটির ঝুঁকি বলো। ৩. কোন অফিসিয়াল ডকুমেন্টেশন (nodejs.org, Microsoft Learn) থেকে আমি এটি যাচাই করতে পারি, তা বলো। ৪. তোমার তথ্য পুরোনো হতে পারে — কোন অংশটি আমার নিজে মিলিয়ে দেখা উচিত, সেটিও জানাও।

AI-এর দেওয়া সেটআপ-নির্দেশ চালানোর আগে — চেকলিস্ট

পরীক্ষা ও ইন্টারভিউতে
  • Node.js কী — ভাষা না framework? — কোনোটিই নয়; এটি V8-এর ওপর তৈরি একটি JavaScript runtime, যা browser-এর বাইরে JavaScript চালায়।
  • Browser আর Node.js-এর JavaScript-এ পার্থক্য কী? — ভাষা এক; browser দেয় DOM ও window, Node দেয় process, fs-এর মতো সিস্টেম-সুবিধা।
  • REPL কী? — Read–Eval–Print Loop: একটি লাইন পড়ে, হিসাব করে, ফল দেখিয়ে আবার অপেক্ষা করে; যেমন browser console বা node.
  • LTS version কেন বেছে নেওয়া হয়? — দীর্ঘ মেয়াদে নিরাপত্তা ও bug-fix আপডেট পায়, তাই production ও শেখার জন্য স্থিতিশীল।
  • debugger; statement কী করে? — DevTools বা debugger যুক্ত থাকলে সেই লাইনে execution থামায়; না থাকলে কিছুই করে না।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।

প্র ০১আজ F12 চাপলেই যে DevTools খোলে, সেটি একসময় ছিল না। Firebug কীভাবে browser-এর DevTools-এর জন্ম দিল, আর এতে ওয়েব ডেভেলপমেন্ট কীভাবে বদলাল?

২০০০-এর দশকের শুরুতে JavaScript debug করার প্রধান হাতিয়ার ছিল alert(). একটি variable-এর মান জানতে কোডে alert(x) বসাতে হতো, পাতা reload করতে হতো, আর প্রতিটি পপ-আপ একে একে বন্ধ করতে হতো। লুপের ভেতরে alert রাখলে কী অবস্থা হতো, কল্পনা করুন। পাতার HTML কাঠামো বা CSS কেন কাজ করছে না, তা দেখার কোনো সহজ উপায় ছিল না।

২০০৬ সালে Joe Hewitt Firefox-এর জন্য Firebug নামে একটি extension প্রকাশ করেন। এক জায়গায় এটি দিল — পাতার জীবন্ত DOM tree দেখা ও বদলানো, কোন CSS নিয়ম কোথা থেকে আসছে তা দেখা, network request-এর তালিকা, একটি JavaScript console, আর breakpoint-সহ debugger. console.log ব্যাপকভাবে জনপ্রিয় হওয়ার পেছনেও Firebug-এর বড় ভূমিকা ছিল।

প্রভাব ছিল বিশাল। একই সময়ে Gmail, Google Maps-এর মতো AJAX-নির্ভর বড় ওয়েব অ্যাপ তৈরি হচ্ছিল — এত জটিল JavaScript চোখ বন্ধ করে লেখা সম্ভব ছিল না। Browser নির্মাতারা বুঝলেন ডেভেলপার টুল ঐচ্ছিক নয়। WebKit-এর Web Inspector (যা Safari আর পরে Chrome-এ ব্যবহৃত হয়) দ্রুত উন্নত হলো; ২০০৮ সালে Chrome এসেছিল নিজস্ব DevTools নিয়ে; Firefox নিজের ভেতরে DevTools তৈরি করল, আর ২০১৭ সালে Firebug-এর আলাদা উন্নয়ন বন্ধ হয়ে সেটি Firefox DevTools-এর সাথে মিশে যায়।

আজকের DevTools আরও অনেক দূর এগিয়েছে — performance profiling, memory snapshot, মোবাইল স্ক্রিনের নকল, accessibility পরীক্ষা। পর্ব ৫৩-এ এর কিছু দেখবেন। আরেকটি শিক্ষা আছে: Firebug ছিল একজন ডেভেলপারের বানানো extension, যা পুরো শিল্পের মান বদলে দিল।

মূল উপলব্ধি: ভালো টুল শুধু কাজ দ্রুত করে না, কী ধরনের সফটওয়্যার বানানো সম্ভব তা-ও বদলে দেয়। যা চোখে দেখা যায়, তা-ই ঠিক করা যায় — DevTools ব্যবহারে দক্ষতা তাই একজন JavaScript ডেভেলপারের মৌলিক দক্ষতা।

প্র ০২Node.js-এর এত version কেন, আর কেন এতদিন শুধু জোড় সংখ্যার version-গুলো LTS হতো? এই release-চক্রের পেছনে কী যুক্তি?

শুরুর বছরগুলোতে Node.js-এর release ছিল অনিয়মিত, version নম্বর দীর্ঘদিন 0.x-এ আটকে ছিল। ২০১৪ সালে উন্নয়নের গতি ও পরিচালনা নিয়ে অসন্তোষ থেকে একদল মূল ডেভেলপার io.js নামে আলাদা শাখা (fork) তৈরি করেন। ২০১৫ সালে দুই দল আবার এক হয়, একটি নিরপেক্ষ foundation গঠিত হয়, আর একটি স্পষ্ট, পূর্বানুমেয় release নীতি নেওয়া হয়। সেই বছরের শেষে Node 4 হয় প্রথম LTS লাইন।

এতদিনের নীতি মোটামুটি এমন: প্রতি ছয় মাসে একটি নতুন major version. এপ্রিলে আসা জোড় সংখ্যার version কয়েক মাস “Current” থাকে, তারপর অক্টোবরে LTS-এ উন্নীত হয় এবং মোট প্রায় আড়াই-তিন বছর আপডেট পায় — প্রথমে Active LTS, পরে শুধু জরুরি নিরাপত্তা-সংশোধনের Maintenance পর্যায়। বিজোড় সংখ্যার version (যেমন 21, 23) ছয় মাস পরেই সাপোর্ট হারায়; সেগুলো মূলত নতুন ফিচার আগে পরখ করার জায়গা।

কেন এমন ভাগ? দুই ধরনের ব্যবহারকারীর চাহিদা পরস্পরবিরোধী। Library লেখক আর উৎসাহী ডেভেলপার নতুন ফিচার দ্রুত চান। কিন্তু একটি ব্যাংক বা ই-কমার্স কোম্পানি চায় এমন একটি version, যার ওপর তারা কয়েক বছর নিশ্চিন্তে সার্ভার চালাতে পারবে, শুধু নিরাপত্তা আপডেট নেবে, আর প্রতি ছয় মাসে বড় পরিবর্তনের ঝুঁকি নেবে না। দুটি ধারা রেখে উভয়কেই সন্তুষ্ট করা হয়। Ubuntu-র LTS বা Java-র LTS-এও একই চিন্তা।

তবে মনে রাখুন, এই সূচি পাথরে খোদাই নয় — Node.js প্রজেক্ট সময়ে সময়ে release পরিকল্পনা পুনর্বিবেচনা করে, আর সাম্প্রতিক সময়ে একে সরল করার আলোচনাও হয়েছে। তাই “জোড় মানেই LTS” নিয়মটি ইতিহাস হিসেবে জানুন, কিন্তু সিদ্ধান্তের আগে nodejs.org-এর release সূচি দেখুন। একটি LTS-এর সাপোর্ট শেষ (End-of-Life) হলে তাতে আর নিরাপত্তা-সংশোধন আসে না — তখন আপগ্রেড বাধ্যতামূলক।

মূল উপলব্ধি: সফটওয়্যারের version শুধু একটি সংখ্যা নয়, একটি প্রতিশ্রুতি — কতদিন, কী ধরনের আপডেট পাবেন। পেশাদার ডেভেলপার version বাছেন সেই প্রতিশ্রুতি দেখে, আর End-of-Life তারিখ ক্যালেন্ডারে লিখে রাখেন।

প্র ০৩Browser console আর node-এর REPL — এই “একটি লাইন লেখো, সাথে সাথে ফল দেখো” ধারণাটি কোথা থেকে এলো? এর ভালো-মন্দ কী?

REPL ধারণার শিকড় Lisp-এ। ১৯৫৮ সালে John McCarthy Lisp-এর নকশা করেন, আর ১৯৬০-এর দশকের Lisp সিস্টেমগুলোতে প্রোগ্রামার একটি expression লিখতেন, সিস্টেম সেটি পড়ত (read), হিসাব করত (eval), ফল ছাপত (print), আবার পরের লাইনের অপেক্ষা করত (loop). নামটিই এসেছে Lisp-এর তিনটি মৌলিক ফাংশন থেকে। সেই যুগে যখন বেশিরভাগ প্রোগ্রাম punch card-এ জমা দিয়ে ঘণ্টার পর ঘণ্টা ফলের অপেক্ষা করতে হতো, তখন কম্পিউটারের সাথে সরাসরি “কথোপকথন” ছিল বিপ্লবী।

পরে Smalltalk, BASIC, Python, Ruby — অনেক ভাষাই এই ঐতিহ্য নেয়। JavaScript-এর ক্ষেত্রে browser console আর Node REPL একে প্রায় সব কম্পিউটারে পৌঁছে দিয়েছে। Java-র মতো compile-নির্ভর ভাষাও শেষ পর্যন্ত JShell (Java 9) যোগ করেছে — প্রমাণ যে এই অভ্যাসের মূল্য সবাই স্বীকার করে।

ভালো দিক: তাৎক্ষণিক feedback. “"5" + 1 কত হয়?” — অনুমান না করে দুই সেকেন্ডে দেখে নেওয়া যায়। অচেনা API ([1,2,3].at(-1)) কী ফেরত দেয়, পরখ করা যায়। শেখার গতি বহুগুণ বাড়ে, আর ভুল ধারণা সাথে সাথে ভাঙে।

সীমাবদ্ধতা: REPL-এর কাজ ক্ষণস্থায়ী; বন্ধ করলেই হারায়। Console-এর আচরণ ফাইলের আচরণের সাথে সবসময় হুবহু মেলে না — যেমন Chrome console-এ একই let নাম আবার ঘোষণা করা যায় (সুবিধার জন্য), কিন্তু ফাইলে সেটি SyntaxError. আবার console-এ top-level await সরাসরি চলে, সাধারণ script-এ চলে না। তাই REPL পরীক্ষার জায়গা, চূড়ান্ত প্রমাণের জায়গা নয়।

মূল উপলব্ধি: “লিখি, চালাই, দেখি” চক্র যত ছোট, শেখা তত দ্রুত। কিন্তু REPL-এ যা কাজ করল, তা ফাইলে লিখে আবার চালিয়ে নিশ্চিত হওয়াই পেশাদার অভ্যাস।

প্র ০৪VS Code নিজেই নাকি JavaScript-এ বানানো — Electron-এর ওপর। একটি JavaScript অ্যাপ দিয়ে JavaScript সম্পাদনা — এর সুবিধা আর মূল্য কী?

Microsoft ২০১৫ সালে VS Code ঘোষণা করে, একই বছরের শেষে এর কোড open-source করে, আর ২০১৬ সালে 1.0 প্রকাশ পায়। এটি তৈরি Electron-এর ওপর — GitHub-এর তৈরি একটি কাঠামো, যা মূলত তাদের Atom editor-এর জন্য বানানো হয়েছিল। Electron একটি desktop অ্যাপের ভেতরে Chromium (Chrome-এর open-source ভিত্তি) আর Node.js একসাথে বসিয়ে দেয়। ফলে অ্যাপের চেহারা বানানো হয় HTML-CSS দিয়ে, আর ফাইল পড়া-লেখার মতো কাজ হয় Node.js দিয়ে। VS Code-এর নিজের কোড মূলত TypeScript-এ লেখা।

সুবিধা: একই কোড Windows, macOS আর Linux-এ চলে — তিনটি আলাদা অ্যাপ বানাতে হয় না। Extension লেখা যায় JavaScript/TypeScript-এ, তাই লাখ লাখ ওয়েব ডেভেলপার সহজেই extension বানাতে পারেন — VS Code-এর বিশাল extension জগতের এটি বড় কারণ। Slack, Discord-এর desktop অ্যাপ, Figma-র desktop সংস্করণও Electron বা এর মতো কাঠামো ব্যবহার করে।

মূল্য: প্রতিটি Electron অ্যাপ নিজের সাথে একটি পুরো browser engine বয়ে বেড়ায়, তাই native অ্যাপের তুলনায় বেশি RAM ও disk লাগে। Atom ধীরগতির জন্য সমালোচিত ছিল এবং ২০২২ সালে বন্ধ হয়ে যায়। VS Code দেখিয়েছে সাবধানী প্রকৌশলে — ভারী কাজ আলাদা process-এ সরানো, editor অংশ অত্যন্ত অপ্টিমাইজ করা — একই প্রযুক্তিতে দ্রুত অ্যাপ সম্ভব। আরেকটি বড় অবদান: Microsoft ২০১৬ সালে Language Server Protocol প্রকাশ করে, যাতে ভাষার বুদ্ধিমত্তা (autocomplete, ভুল ধরা) editor থেকে আলাদা একটি সার্ভারে থাকে এবং যেকোনো editor তা ব্যবহার করতে পারে।

নাদিয়ার ৪ GB ল্যাপটপের জন্য বাস্তব পরামর্শ: অপ্রয়োজনীয় extension বন্ধ রাখুন, একসাথে অনেক উইন্ডো খোলা রাখবেন না।

মূল উপলব্ধি: JavaScript আজ শুধু ওয়েবপাতার ভাষা নয় — আপনি যে টুল দিয়ে কোড লিখছেন, সেটিও এই ভাষার শক্তির প্রমাণ। আর প্রতিটি প্রযুক্তি-সিদ্ধান্তে সুবিধা আর খরচ পাশাপাশি থাকে।

প্র ০৫একটাই Node ইনস্টল করে রাখলে কী সমস্যা? Version manager-এর মতো টুল কেন তৈরি হলো, আর “dependency hell” জিনিসটা কী?

ধরুন আপনি একটি সফটওয়্যার ফার্মে কাজ করেন। একটি পুরোনো ক্লায়েন্ট project চলে Node 18-এ, কারণ তার কিছু package নতুন version-এ চলে না। নতুন project-টি Node 22-এর ফিচার ব্যবহার করে। কম্পিউটারে যদি একটিমাত্র Node থাকে, প্রতিবার project বদলালে uninstall-install করতে হবে — অথবা একটি project ভাঙবে। এটিই version manager তৈরির মূল কারণ।

এই সমস্যা শুধু JavaScript-এর নয়। Windows-এ একসময়ের কুখ্যাত “DLL hell” — দুটি প্রোগ্রাম একই library-র ভিন্ন version চাইলে একটি ভেঙে যেত। Python-এ একই কারণে এসেছে pyenv আর virtual environment; Ruby-তে rbenv ও rvm. Dependency hell বলতে বোঝায় এমন অবস্থা যেখানে package A চায় C-এর version 1, package B চায় C-এর version 2, আর সবগুলোকে একসাথে খুশি রাখা অসম্ভব হয়ে পড়ে। Runtime-এর version (Node নিজে) এই শিকলের সবচেয়ে নিচের আংটা — সেটি ভুল হলে ওপরের সব নড়বড়ে।

Node জগতে nvm ছিল প্রথম দিকের জনপ্রিয় সমাধান — একটি shell script, যা প্রতিটি version আলাদা ফোল্ডারে রাখে আর PATH বদলে দিয়ে বেছে নেওয়া version-টিকে সামনে আনে। পরে এসেছে fnm, Volta-র মতো দ্রুততর বা স্বয়ংক্রিয় টুল, যা project ফোল্ডারে ঢুকলেই .nvmrc বা package.json পড়ে সঠিক version বেছে নেয়। আর npm-এর package-lock.json (পর্ব ৪৬) একই সমস্যার পরের স্তর সামলায় — প্রতিটি package-এর হুবহু version লিখে রাখে।

এর আরও বড় রূপ হলো container (যেমন Docker) — runtime, library, সেটিং সবকিছু একটি প্যাকেটে, যাতে ডেভেলপারের ল্যাপটপ আর সার্ভারে একই পরিবেশ থাকে।

মূল উপলব্ধি: “আমার কম্পিউটারে চলে” যথেষ্ট নয়; লক্ষ্য হলো “যেকোনো কম্পিউটারে একইভাবে চলে”। এজন্য পরিবেশের সিদ্ধান্ত মানুষের স্মৃতিতে না রেখে ফাইলে লিখে রাখতে হয় — .nvmrc, engines, lock file — যাতে টুল নিজেই তা মেনে চলে।

অনুশীলন

বেশিরভাগ কাজ হাতে-কলমে দেখার — কোড লেখা সামান্যই।

  1. Echo বনাম log: Browser console-এ পরপর লিখুন — "ঢাকা".length, তারপর console.log("ঢাকা".length), তারপর $_. প্রতিটির পর কী দেখলেন, আর কেন?

    প্রথমটিতে echo: ← 4 (“ঢাকা” লিখতে ৪টি UTF-16 code unit লাগে: ঢ, া, ক, া — এর বিস্তারিত পর্ব ০৯-এ)। দ্বিতীয়টিতে log ছাপল 4, তারপর echo ← undefined, কারণ console.log কিছু ফেরত দেয় না। তৃতীয়টিতে $_ = undefined — সবশেষ হিসাব করা মান ছিল console.log(...)-এর ফল, ৪ নয়।

  2. নিজের সেটআপ যাচাই: Node.js ইনস্টল করে node -v চালান, তারপর nodejs.org-এ গিয়ে দেখুন আপনার major version এখন LTS কি না, আর তার End-of-Life কবে।

    nodejs.org-এর release পাতায় প্রতিটি major version-এর অবস্থা (Current, Active LTS, Maintenance LTS, End-of-life) আর তারিখ দেওয়া থাকে। আপনার v-এর পরের প্রথম সংখ্যাটি মিলিয়ে নিন। Active বা Maintenance LTS হলে ঠিক আছে; End-of-life হলে নতুন LTS-এ আপগ্রেড করুন। এখানে কোনো “সঠিক সংখ্যা” নেই — অভ্যাসটিই আসল।

  3. Event loop চোখে দেখা: নিচের তিন লাইন app.js-এ লিখে node app.js চালানোর আগে অনুমান করুন আউটপুটের ক্রম কী হবে: setTimeout(() => console.log("C"), 0); console.log("A"); console.log("B");

    আউটপুট A, B, C. সময় 0 ms দিলেও setTimeout-এর callback চলে বর্তমান কোড পুরো শেষ হওয়ার পরে, event loop-এর মাধ্যমে। তাই ফাইলের সাধারণ লাইনগুলো আগে, টাইমার পরে। এটি পর্ব ৩১-এর মূল ধারণার একটি পূর্বাভাস।

  4. প্রথম debugging: পর্বের ৬ নম্বর অংশের index.html + script.js বানান। script.js-এ ইচ্ছা করে getElementById("titel") লিখুন। পাতা খুলে কী দেখেন? তারপর Sources ট্যাবে breakpoint বসিয়ে কারণ খুঁজুন।

    শিরোনাম বদলায় না, আর Console-এ লাল error আসে — Chrome/Edge-এ Uncaught TypeError: Cannot set properties of null (setting 'textContent'). Breakpoint বসিয়ে document.getElementById("titel") হিসাব করলে দেখবেন মান null — ওই id-র কোনো element নেই। null-এর ওপর property বসানো যায় না, তাই error. বানান ঠিক করলেই সমাধান। লক্ষ করুন, এখানে error এসেছে, আর পর্বের NaN উদাহরণে আসেনি — কোনটি চুপচাপ ভুল করে আর কোনটি চিৎকার করে, তা চেনা debugging-এর বড় অংশ।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমনতুন কম্পিউটারে প্রথম Node.js প্রোগ্রাম চালানোর ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. 📥 nodejs.org থেকে LTS version ইনস্টল করা
  2. 🔎 নতুন terminal খুলে node -v দিয়ে যাচাই
  3. 📁 একটি project ফোল্ডার বানিয়ে VS Code-এ খোলা
  4. ✍️ app.js ফাইল তৈরি করে কোড লেখা ও save
  5. ▶️ Integrated terminal-এ node app.js চালানো

Browser console-এ console.log("Hi") লিখে Enter চাপলে Hi-এর পরে undefined দেখা যায়। কেন?

  • কোডে একটি ভুল আছে, তাই undefined
  • Console লাইনটির ফেরত মান দেখায়, আর console.log কিছু ফেরত দেয় না
  • "Hi" string-টি সংজ্ঞায়িত নয়
  • Browser-এ console.log ঠিকমতো কাজ করে না

একজন শিক্ষার্থী JavaScript শিখতে ও একটি চাকরির project-এ কাজ করতে Node.js ইনস্টল করবেন। কোন version বেছে নেওয়া সবচেয়ে যুক্তিসঙ্গত?

  • সবসময় Current, কারণ সবচেয়ে নতুন
  • যত পুরোনো তত স্থিতিশীল, তাই সবচেয়ে পুরোনো version
  • nodejs.org-এ যেটি বর্তমান LTS হিসেবে চিহ্নিত
  • যেকোনো একটি, version-এ কিছু যায় আসে না

একটি Node.js ফাইলে শেষ লাইনের আগে setTimeout দিয়ে ১ সেকেন্ডের একটি টাইমার আছে। node app.js চালালে কী ঘটবে?

  • শেষ লাইনে পৌঁছেই process বন্ধ হবে, টাইমার চলবে না
  • টাইমারের ১ সেকেন্ড শেষ না হওয়া পর্যন্ত পরের লাইনগুলো চলবে না
  • প্রোগ্রাম চিরকাল চলতে থাকবে, Ctrl+C লাগবে
  • বাকি লাইনগুলো আগে চলবে, ১ সেকেন্ড পর টাইমার চলবে, তারপর process শেষ হবে

JavaScript কোডে debugger; statement-এর কাজ কী?

  • DevTools খোলা থাকলে ঠিক সেই লাইনে প্রোগ্রাম থামায়
  • কোডের সব ভুল নিজে থেকে ঠিক করে
  • Console-এ variable-গুলোর মান ছাপে
  • DevTools বন্ধ থাকলে প্রোগ্রাম error দিয়ে থেমে যায়

একটি টিমে সবাই যেন একই Node.js version ব্যবহার করেন, তা নিশ্চিত করার ভালো উপায় কোনটি?

  • টিমের চ্যাটে version নম্বর একবার জানিয়ে দেওয়া
  • প্রত্যেককে নিজের পছন্দের version নিতে দেওয়া
  • Project-এ .nvmrc ফাইল আর package.json-এর engines অংশে version লিখে রাখা
  • সবাই সবসময় Current version ইনস্টল করবে, এই নিয়ম করা

একটি AI চ্যাটবট Linux-এ Node.js ইনস্টলের জন্য একটি PPA যোগ করার কমান্ড দিল। চালানোর আগে সবচেয়ে জরুরি কাজ কোনটি?

  • AI-কেই জিজ্ঞেস করা, কমান্ডটি ঠিক আছে কি না
  • nodejs.org-এর নির্দেশের সাথে মিলিয়ে দেখা — উৎসটি অফিসিয়াল ও সক্রিয় কি না, version এখনো LTS কি না
  • sudo দিয়ে চালানো, যাতে কোনো permission error না আসে
  • কমান্ডটি ছোট হলে চালিয়ে দেওয়া, লম্বা হলে বাদ

Browser console-এ typeof process লিখলে সাধারণত "undefined" আসে, কিন্তু Node.js-এ "object". এর কারণ কী?

  • process Node.js পরিবেশের দেওয়া object, JavaScript ভাষার অংশ নয়
  • Browser আর Node.js দুটি আলাদা প্রোগ্রামিং ভাষা চালায়
  • Browser-এ typeof অপারেটর কাজ করে না
  • Browser-এর version পুরোনো হলে এমন হয়

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. শুরু করতে শুধু browser: F12 → Console একটি REPL; browser-এর বাইরে চালাতে Node.js, লেখার আরামের জন্য VS Code.
  2. Console নিজে লাইনের মান দেখায় (echo); console.log ছাপে আর ফেরত দেয় undefined.
  3. Node.js-এর LTS নিন, node -v দিয়ে যাচাই করুন; একাধিক project-এ version manager আর .nvmrc.
  4. node app.js: process শুরু → ফাইল পড়া → engine চালায় → event loop খালি হলে exit.
  5. ভুল উত্তর এলে breakpoint বসিয়ে variable দেখুন; AI-এর দেওয়া install কমান্ড অফিসিয়াল উৎসে মিলিয়ে তবেই চালান।

পরের পর্বে: টুল তৈরি। এবার লিখবেন প্রথম আসল প্রোগ্রাম — console.log থেকে শুরু করে ওয়েবপাতার ভেতরে লেখা বসানো, আর <script> ট্যাগ কোথায় রাখলে কী হয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান