📦 Package Managers — কী, কেন এবং কোনটা ব্যবহার করবে?

JavaScript/Node.js প্রজেক্টে বাইরের library ও tool ব্যবহার করতে Package Manager অপরিহার্য। এটি ছাড়া আধুনিক web development কল্পনাই করা যায় না।


🔷 Package Manager কী?

Package Manager হলো এমন একটি টুল যা তোমার প্রজেক্টে বাইরের JavaScript library (package) ইনস্টল, আপডেট, মুছে ফেলা এবং সংস্করণ নিয়ন্ত্রণ করে। তুমি নিজে কোড লেখার পাশাপাশি অন্যদের তৈরি হাজার হাজার উপকারী library ব্যবহার করতে পারো — যেমন React, Express, Lodash, Axios ইত্যাদি। Package Manager এই সব library একটি কমান্ডে নামিয়ে দেয়।

npmjs.com হলো JavaScript-এর সবচেয়ে বড় package registry — এখানে ২০ লক্ষেরও বেশি package আছে। npm, pnpm, Yarn, Bun — এই সব manager ওই একই registry থেকেই package নামায়।

Package Manager ছাড়া কী সমস্যা হত?

Package Manager ছাড়া: → প্রতিটি library-র ওয়েবসাইটে গিয়ে manually ডাউনলোড করতে হত → প্রতিটি library-র dependencies-ও manually নামাতে হত → version mismatch হলে বুঝতে পারতে না → টিমের সবার কম্পিউটারে একই version রাখা কঠিন হত → "আমার কম্পিউটারে চলে, তোমার চলছে না কেন?" — এই সমস্যা! Package Manager থাকলে: npm install ← একটি কমান্ডে সব হয়ে যায় ✅
Package Manager তৈরি সাল বিশেষত্ব গতি
npm ২০১০ সবচেয়ে পুরনো, Node.js-এর সাথে আসে, বিশাল registry মাঝারি
pnpm ২০১৭ disk space বাঁচায়, hard links ব্যবহার, monorepo-বান্ধব দ্রুত
Yarn ২০১৬ Facebook তৈরি, reliable lockfile, workspaces দ্রুত
Bun ২০২২ All-in-one runtime+manager, Zig-এ লেখা, সবচেয়ে দ্রুত 🚀 সবচেয়ে দ্রুত

🔷 Package Manager কীভাবে কাজ করে?

সব package manager-এর কাজের ধাপ মূলত একই:

তুমি লেখো: npm install express Package Manager কী করে: ১. npmjs.com registry-তে "express" খোঁজে ২. সর্বশেষ stable version খুঁজে বের করে ③ express-এর সব dependencies-এর তালিকা নেয় ④ সব package ডাউনলোড করে ⑤ node_modules/ ফোল্ডারে রাখে ⑥ package.json-এ dependency যোগ করে ⑦ lockfile আপডেট করে (exact version record) ফলাফল: node_modules/ express/ body-parser/ ← express-এর dependency accepts/ ← আরো nested dependency ... package.json ← "express": "^4.18.2" package-lock.json ← exact version সংরক্ষিত

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚖️ npm vs pnpm vs Yarn vs Bun — বিস্তারিত তুলনা

কোনটা ব্যবহার করবে সেটা নির্ভর করে তোমার প্রজেক্টের চাহিদার উপর।


🔷 সার্বিক তুলনা

বিষয় npm pnpm Yarn Classic Bun
Install গতি মাঝারি দ্রুত দ্রুত 🚀 সবচেয়ে দ্রুত
Disk Space বেশি ব্যবহার কম (hard links) মাঝারি কম (global cache)
Lockfile package-lock.json pnpm-lock.yaml yarn.lock bun.lock
node_modules flat structure virtual store + symlinks flat hoisted flat / isolated
Workspaces ✅ আছে ✅ শক্তিশালী ✅ প্রথম দিকের ✅ আছে
Runtime ❌ শুধু manager ❌ শুধু manager ❌ শুধু manager ✅ Runtime+Test+Build
Node.js compatibility 100% 100% 100% ~95%+
শেখার সহজতা ⭐⭐⭐ সহজ ⭐⭐ মাঝারি ⭐⭐ মাঝারি ⭐⭐⭐ সহজ
জনপ্রিয়তা 🏆 সর্বোচ্চ বাড়ছে দ্রুত মাঝারি বাড়ছে দ্রুত

কোনটা বেছে নেবে?

তুমি যদি... তাহলে ব্যবহার করো
এইমাত্র শুরু করছো npm — Node.js-এর সাথেই আসে, কোনো install নেই
দ্রুত install ও disk space বাঁচাতে চাও pnpm — monorepo-তেও সেরা
Facebook/Meta-এর ecosystem-এ কাজ করো Yarn — বিশেষত workspaces-এর জন্য
সর্বোচ্চ গতি চাও, TypeScript সরাসরি চালাতে চাও Bun — সব-in-one toolkit
শেখার পরামর্শ: প্রথমে npm দিয়ে শুরু করো — এটা সব জায়গায় আছে। npm ভালো বুঝলে বাকিগুলো অনেক সহজ মনে হবে। তারপর pnpm বা Bun ব্যবহার করতে পারো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🟥 npm — Node Package Manager সম্পূর্ণ গাইড

npm হলো JavaScript-এর সবচেয়ে পুরনো ও জনপ্রিয় package manager। Node.js ইনস্টল করলেই npm আসে। ২০ লক্ষেরও বেশি package নিয়ে বিশ্বের বৃহত্তম software registry।


🔷 npm কী এবং কীভাবে তৈরি হলো?

npm (Node Package Manager) ২০১০ সালে Isaac Z. Schlueter তৈরি করেন। এটি একসাথে তিনটি জিনিস:

npm তিনটি জিনিস এক নামে: ১. Command-line tool → terminal-এ "npm install" টাইপ করো ২. Registry → npmjs.com-এ ২০ লক্ষ+ package জমা আছে ③. Website → npmjs.com-এ package খোঁজো, documentation পড়ো
সাল ঘটনা
২০১০ npm v1 — Node.js-এর সাথে প্রথম release।
২০১৪ npm v2 — nested node_modules, সমস্যা শুরু।
২০১৬ npm v3 — flat node_modules structure, Yarn-এর competition শুরু।
২০১৭ npm v5 — package-lock.json যোগ (Yarn-এর জবাব)।
২০২০ GitHub/Microsoft npm কিনে নেয় $7.5 billion-এ।
২০২১ npm v7 — Workspaces, peer deps auto-install।
২০২৩+ npm v10 — provenance statements, OIDC, আরো দ্রুত।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ npm ইনস্টল ও প্রথম Setup


🔷 Node.js ও npm ইনস্টল করা

npm আলাদাভাবে ইনস্টল করতে হয় না — Node.js ইনস্টল করলেই npm আসে।

সরাসরি ইনস্টল

# nodejs.org থেকে LTS version ডাউনলোড করো # https://nodejs.org/en/download/ # ইনস্টল যাচাই করো node --version # v20.15.0 বা তার বেশি npm --version # 10.x.x বা তার বেশি

nvm দিয়ে (Professional পদ্ধতি)

# macOS / Linux curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # Windows → https://github.com/coreybutler/nvm-windows # Node.js ইনস্টল ও ব্যবহার nvm install --lts # সর্বশেষ LTS nvm install 20 # নির্দিষ্ট version nvm use 20 # এই version চালু করো nvm alias default 20 # default সেট করো nvm list # installed versions দেখো
# npm নিজেকে update করো npm install -g npm@latest # নির্দিষ্ট version npm install -g npm@10

🔷 প্রজেক্ট শুরু — npm init

# interactive — প্রশ্ন করবে npm init # সব default নাও (-y = yes to everything) npm init -y # scoped package init npm init --scope=@mycompany # package.json তৈরি হবে: { "name": "my-website", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\"" }, "author": "", "license": "ISC" }

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📄 package.json — প্রজেক্টের পরিচয়পত্র

package.json হলো প্রজেক্টের সবচেয়ে গুরুত্বপূর্ণ ফাইল। সব metadata, dependencies ও scripts এখানে থাকে।


🔷 package.json-এর সব ক্ষেত্র বিস্তারিত

{ // ━━━━━━━━━━ পরিচয় ━━━━━━━━━━ "name": "my-website", // lowercase, hyphen দিয়ে (space নয়) "version": "1.0.0", // SemVer: MAJOR.MINOR.PATCH "description": "আমার ওয়েবসাইট", "keywords": ["web", "nodejs"], // npmjs.com search-এ সাহায্য করে "homepage": "https://mysite.com", "license": "MIT", "private": true, // true হলে accidental npm publish বন্ধ // ━━━━━━━━━━ লেখক ও অবদানকারী ━━━━━━━━━━ "author": { "name": "Farid Rahman", "email": "farid@example.com", "url": "https://farid.dev" }, "contributors": [ { "name": "Reza", "email": "reza@example.com" } ], // ━━━━━━━━━━ ফাইল structure ━━━━━━━━━━ "main": "index.js", // CommonJS entry (require করলে এটা লোড হয়) "module": "dist/index.mjs", // ES Module entry "exports": { // modern: conditional exports ".": { "import": "./dist/index.mjs", "require": "./dist/index.cjs" } }, "files": ["dist/", "src/"], // publish হলে কোন ফাইল যাবে "bin": { "my-cli": "./bin/cli.js" }, // executable তৈরি // ━━━━━━━━━━ scripts ━━━━━━━━━━ "scripts": { "start": "node index.js", "dev": "nodemon index.js", "build": "webpack --mode production", "test": "jest --coverage", "lint": "eslint src/", "prepare": "npm run build" // publish-এর আগে চলে }, // ━━━━━━━━━━ dependencies ━━━━━━━━━━ "dependencies": { // production-এ লাগবে "express": "^4.18.2", "axios": "^1.6.0" }, "devDependencies": { // development-এ লাগবে "jest": "^29.0.0", "nodemon": "^3.0.0", "webpack": "^5.88.0" }, "peerDependencies": { // user-কে নিজে install করতে হবে "react": ">=17.0.0" }, "peerDependenciesMeta": { "react": { "optional": true } // optional করা যায় }, "optionalDependencies": { // না থাকলেও চলে "fsevents": "^2.3.0" }, // ━━━━━━━━━━ engine requirements ━━━━━━━━━━ "engines": { "node": ">=18.0.0", "npm": ">=9.0.0" }, // ━━━━━━━━━━ repository info ━━━━━━━━━━ "repository": { "type": "git", "url": "https://github.com/farid/my-website.git" }, "bugs": { "url": "https://github.com/farid/my-website/issues" }, // ━━━━━━━━━━ type (ESM vs CJS) ━━━━━━━━━━ "type": "module" // "module" = ESM (.js files), "commonjs" = CJS (default) }

dependencies-এর চার ধরন

ধরন উদ্দেশ্য উদাহরণ কখন install হয়?
dependencies Production-এ app চালাতে লাগে express, react, axios সবসময়
devDependencies শুধু development-এ লাগে jest, webpack, eslint --production ছাড়া
peerDependencies Plugin/lib-এর জন্য host-এ থাকা দরকার react (plugin-এর জন্য) npm v7+ auto-install
optionalDependencies না থাকলেও চলে fsevents (macOS-specific) চেষ্টা করে, fail হলে skip

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📥 npm দিয়ে Dependencies ম্যানেজ করা


🔷 npm install — Package ইনস্টল করা

# ━━━━━━ সব dependencies install ━━━━━━ npm install npm i # shorthand # ━━━━━━ নির্দিষ্ট package ━━━━━━ npm install express npm install express axios lodash # একসাথে একাধিক npm install -D jest # devDependency npm install --save-dev nodemon # devDependency (same) npm install -g nodemon # global npm install --global create-react-app # global (same) # ━━━━━━ নির্দিষ্ট version ━━━━━━ npm install express@4.18.0 # exact version npm install express@latest # সর্বশেষ npm install express@next # beta/next tag npm install express@^4.0.0 # range # ━━━━━━ বিশেষ sources ━━━━━━ npm install git+https://github.com/user/repo.git npm install git+ssh://github.com/user/repo.git#v1.0.0 npm install github:user/repo # shorthand npm install user/repo # GitHub shorthand npm install ../my-local-pkg # local path npm install ./pkg.tgz # local tarball # ━━━━━━ production mode ━━━━━━ npm install --production npm install --omit=dev # same (newer syntax)

CI/CD-এর জন্য npm ci

# npm ci = clean install (CI/CD-এর জন্য আদর্শ) npm ci # npm install vs npm ci পার্থক্য: # npm install → package-lock.json আপডেট করতে পারে # npm ci → হুবহু lockfile follow করে, কোনো update নেই # node_modules মুছে fresh start করে # lockfile না থাকলে error দেয় # GitHub Actions-এ: - run: npm ci # ← সবসময় এটাই ব্যবহার করো

🔷 Package আপডেট ও মুছা

# ━━━━━━ আপডেট করা ━━━━━━ npm update # সব (semver range-এর মধ্যে) npm update express # নির্দিষ্ট package npm update --save # package.json-ও update করো # Outdated দেখো npm outdated # Output: # Package Current Wanted Latest Location # express 4.17.0 4.18.2 4.18.2 node_modules/express # ━━━━━━ মুছে ফেলা ━━━━━━ npm uninstall express # local npm remove express # same npm rm express # shorthand npm uninstall -g nodemon # global npm uninstall --save-dev jest # devDependency
# ━━━━━━ Package তথ্য দেখা ━━━━━━ npm info express # সব তথ্য npm view express # same npm view express versions # সব available versions npm view express version # সর্বশেষ version npm view express dependencies # direct dependencies # ━━━━━━ Package খোঁজা ━━━━━━ npm search express npm search "date formatting" # ━━━━━━ Installed list ━━━━━━ npm list # সব (nested) npm ls # same npm list --depth=0 # শুধু top-level npm list -g --depth=0 # global packages npm list express # নির্দিষ্ট package আছে কিনা # ━━━━━━ Explain (why installed?) ━━━━━━ npm explain lodash # কেন lodash install হয়েছে? npm why lodash # same
# ━━━━━━ দরকারি অন্য কমান্ড ━━━━━━ # Package-এর docs/homepage browser-এ খোলো npm docs express npm home express # same # Bug tracker খোলো npm bugs express npm issues express # same # Package এর repository খোলো npm repo express

🔷 npx — Install না করে চালানো

npx দিয়ে package globally install না করেই একবার চালানো যায়। npm v5.2+ থেকে npx built-in।

# React app তৈরি (create-react-app install না করেই) npx create-react-app my-app # Vite দিয়ে project তৈরি npx create-vite@latest my-project # নির্দিষ্ট version দিয়ে npx create-react-app@5.0.0 my-app # Local binary চালাও (node_modules/.bin থেকে) npx jest npx eslint . npx webpack --config webpack.config.js # যেকোনো npm package একবার চালাও npx cowsay "Hello!" npx serve dist # static file server # Specific registry থেকে npx --registry=https://my-registry.com my-pkg
npm exec vs npx:
npx pkg = npm exec -- pkg — দুটো একই কাজ করে।
npm exec হলো newer, official syntax।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚡ npm scripts — Task Automation

npm scripts দিয়ে project-এর সব task একটি কমান্ডে করা যায়। build, test, lint — সব কিছু।


🔷 Scripts সেটআপ ও চালানো

// package.json { "scripts": { // ━━━━━━ Built-in lifecycle (npm run ছাড়াই চলে) ━━━━━━ "start": "node server.js", // npm start "test": "jest --coverage", // npm test "restart": "npm stop && npm start", // npm restart // ━━━━━━ Custom scripts (npm run দিয়ে চালাতে হয়) ━━━━━━ "dev": "nodemon server.js", "build": "webpack --mode production", "lint": "eslint src/ --fix", "format": "prettier --write src/", "clean": "rm -rf dist node_modules", "serve": "serve dist --port 3000", // ━━━━━━ Pre/Post Hooks (স্বয়ংক্রিয়) ━━━━━━ "pretest": "npm run lint", // test-এর আগে "posttest": "npm run coverage", // test-এর পরে "prebuild": "npm run clean", // build-এর আগে "postbuild": "npm run compress", // build-এর পরে // ━━━━━━ Chaining ━━━━━━ "deploy": "npm run build && npm test && node deploy.js", "check": "npm run lint && npm run test", // ━━━━━━ Parallel ━━━━━━ "dev:all": "concurrently \"npm run dev:client\" \"npm run dev:server\"" } }
# Scripts চালানো npm start # "start" script npm test # "test" script npm run build # custom script npm run dev npm run lint # Arguments pass করো npm run build -- --watch # -- এরপর args script-এ যায় npm test -- --verbose # Environment variable সেট করে চালাও VARIABLE=value npm run script

🔷 Lifecycle Scripts — সম্পূর্ণ তালিকা

Script নাম কখন চলে
preinstall npm install শুরুর আগে
install / postinstall install সম্পন্নের পরে
preuninstall / postuninstall uninstall-এর আগে/পরে
prestart / start / poststart npm start-এর আগে/সময়/পরে
prerestart / restart / postrestart npm restart-এ
prestop / stop / poststop npm stop-এ
pretest / test / posttest npm test-এ
prepublishOnly শুধু npm publish-এর আগে
prepare npm install এবং npm publish-এর আগে
prepublish ⚠️ deprecated — prepare ব্যবহার করো
prepack / postpack npm pack ও publish-এ
preversion / version / postversion npm version-এ

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔢 Versioning ও Semantic Versioning (SemVer)


🔷 SemVer — MAJOR.MINOR.PATCH বিস্তারিত

Format: MAJOR . MINOR . PATCH উদাহরণ: 4 . 18 . 2 MAJOR (4) → Incompatible API changes — পুরনো code ভাঙতে পারে MINOR (18) → New feature — backward compatible PATCH (2) → Bug fix — backward compatible Pre-release versions: 1.0.0-alpha.1 → initial alpha 1.0.0-beta.3 → beta testing 1.0.0-rc.1 → release candidate 1.0.0 → stable! Build metadata: 1.0.0+build.20240601

Version Range Notation বিস্তারিত

Notation অর্থ উদাহরণ range
"4.18.2" Exact version শুধু 4.18.2
"^4.18.2" MAJOR lock — compatible 4.18.2 ≤ x < 5.0.0
"~4.18.2" MINOR lock — approximately 4.18.2 ≤ x < 4.19.0
">=4.18.2" Greater or equal 4.18.2 এবং তার বেশি সব
">=4.18.2 <5" Range 4.18.2 থেকে 5 এর আগে
"4.18.x" Wildcard 4.18.0 থেকে 4.18.x
"4.x" Major wildcard 4.0.0 থেকে 4.x.x
"*" Any version সর্বশেষ (বিপজ্জনক!)
"latest" Latest tag সর্বশেষ stable
"1.2.3 || 2.0.0" OR condition 1.2.3 অথবা 2.0.0
# Version management কমান্ড npm version patch # 1.0.0 → 1.0.1 npm version minor # 1.0.1 → 1.1.0 npm version major # 1.1.0 → 2.0.0 npm version 2.5.0 # specific version npm version prerelease # 1.0.0 → 1.0.1-0 npm version prepatch # 1.0.0 → 1.0.1-0 npm version preminor # 1.0.0 → 1.1.0-0 npm version premajor # 1.0.0 → 2.0.0-0 # এটি: package.json আপডেট করে + git tag তৈরি করে # git tag চান না? npm version patch --no-git-tag-version

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔒 package-lock.json — Deterministic Installs


🔷 package-lock.json কেন দরকার?

package.json-এ version range থাকে (^4.18.2), তাই আজ install করলে 4.18.2 আসতে পারে, কাল 4.19.0। package-lock.json exact version lock করে — পুরো টিমের এবং CI/CD-এর install হুবহু একই হবে।

package.json: "express": "^4.18.2" ← range (flexible) package-lock.json: "version": "4.18.2", ← exact lock! "integrity": "sha512-...", ← checksum verify "resolved": "https://..." ← exact URL
সোনালী নিয়ম:
→ package-lock.json → সবসময় Git-এ commit করো
→ node_modules/ → সবসময় .gitignore-এ রাখো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏷️ Scopes ও Scoped Packages

Scoped package হলো @namespace/package-name format-এর package। Organization বা personal branding-এর জন্য।


🔷 Scope কী এবং কীভাবে ব্যবহার করবে?

Unscoped package: express, lodash, react Scoped package: @angular/core, @types/react, @mycompany/utils Format: @scope/package-name → @scope = organization বা username → package-name = আসল package নাম
# Scoped package install করো npm install @angular/core npm install @types/react npm install @mycompany/utils # Private scoped package install npm install @mycompany/private-utils # .npmrc-এ auth token দরকার # Scoped package-এর registry আলাদা সেট করো npm config set @mycompany:registry https://npm.mycompany.com/

Public vs Private Package

বিষয় Public Unscoped Public Scoped Private Scoped
নাম format my-pkg @user/my-pkg @org/my-pkg
দেখতে পাবে সবাই সবাই শুধু authorized
Free? ✅ বিনামূল্যে ✅ বিনামূল্যে 💰 paid plan
publish npm publish npm publish --access public npm publish

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🌐 npm Registry ও Package Publishing


🔷 Package Publish করা

# ধাপ ১: npmjs.com-এ account তৈরি/login করো npm adduser # নতুন account npm login # login npm whoami # login যাচাই # ধাপ ২: package তৈরি করো mkdir my-package && cd my-package npm init # ধাপ ৩: publish করো npm publish npm publish --access public # scoped package public করতে npm publish --tag beta # beta tag দিয়ে publish # ধাপ ৪: version বাড়াও ও আবার publish npm version patch npm publish # ধাপ ৫: logout npm logout
# ━━━━━━ Dist Tags ━━━━━━ # Tag হলো version-এর alias (latest, beta, next ইত্যাদি) npm dist-tag add my-pkg@2.0.0 beta # tag যোগ করো npm dist-tag rm my-pkg beta # tag মুছো npm dist-tag ls my-pkg # সব tag দেখো # User install করবে এভাবে: npm install my-pkg # "latest" tag (default) npm install my-pkg@beta # "beta" tag
# ━━━━━━ Deprecate / Unpublish ━━━━━━ # Deprecate (সুপারিশ — package রেখে warning দাও) npm deprecate my-pkg@1.0.0 "এই version-এ bug আছে, v2 ব্যবহার করো" npm deprecate my-pkg "This package is no longer maintained" # Unpublish (সীমাবদ্ধতা আছে!) npm unpublish my-pkg@1.0.0 # নির্দিষ্ট version npm unpublish my-pkg --force # সব version (৭২ ঘন্টার মধ্যে)
# ━━━━━━ Package Access ━━━━━━ npm access list packages @myorg # org-এর packages দেখো npm access list collaborators my-pkg # collaborators দেখো npm access grant read-only @myorg:developer my-pkg npm access revoke @myorg:developer my-pkg

🔷 npm pack — Package Tarball তৈরি

npm pack publish করার আগে package preview করতে কাজে লাগে। এটি একটি .tgz ফাইল তৈরি করে।

# Tarball তৈরি করো (publish না করেই দেখো) npm pack # Output: my-package-1.0.0.tgz # কোন ফাইলগুলো package-এ যাবে দেখো npm pack --dry-run # অন্য project-এ local tarball install করো npm install ../path/to/my-package-1.0.0.tgz # Files field দিয়ে include/exclude করো: // package.json { "files": ["dist/", "src/", "!src/**/*.test.js"] } # .npmignore ফাইল (publish-এ বাদ দিতে) # .gitignore-এর মতো, কিন্তু publish-এর জন্য

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔐 npm Security — audit, 2FA, Provenance


🔷 npm audit — Vulnerability Check

npm audit installed packages-এর known security vulnerabilities চেক করে npm registry-র security database-এর সাথে তুলনা করে।

# Security audit করো npm audit # আউটপুট উদাহরণ: # found 3 vulnerabilities (1 moderate, 2 high) # Automatically fix করো npm audit fix # Major version update করেও fix করো (⚠️ breaking changes হতে পারে) npm audit fix --force # Dry run — কী হবে দেখো, কিছু করো না npm audit fix --dry-run # JSON format-এ report npm audit --json # Specific severity দেখো npm audit --audit-level=high # শুধু high ও critical

🔷 npm 2FA — Two-Factor Authentication

# 2FA setup করো npm profile enable-2fa auth-and-writes # publish-এও 2FA npm profile enable-2fa auth-only # শুধু login-এ 2FA # 2FA status দেখো npm profile get # OTP সহ publish করো npm publish --otp=123456 # 2FA disable করো npm profile disable-2fa

🔷 Provenance ও ECDSA Signatures

Provenance হলো package কোথা থেকে তৈরি হয়েছে তার cryptographic proof। GitHub Actions থেকে publish করলে automatically যোগ হয়।

# GitHub Actions থেকে provenance সহ publish: # (workflow file-এ) - name: Publish with provenance run: npm publish --provenance --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # Signature verify করো npm audit signatures

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ npm config ও .npmrc


🔷 npm config management

# সব config দেখো npm config list npm config list --long # সব default সহ # নির্দিষ্ট config দেখো npm config get registry npm config get prefix # Config সেট করো npm config set registry https://registry.npmjs.org/ npm config set save-exact true # exact version save npm config set init-author-name "Farid" npm config set init-author-email "farid@example.com" npm config set init-license "MIT" npm config set progress false # progress bar বন্ধ # Config মুছো npm config delete save-exact # Config file সরাসরি সম্পাদনা করো npm config edit
# .npmrc ফাইল — project root-এ # এটি project-specific config, সবার জন্য প্রযোজ্য # বিষয়বস্তু উদাহরণ: registry=https://registry.npmjs.org/ save-exact=true engine-strict=true fund=false # Private registry (scope-specific) @mycompany:registry=https://npm.mycompany.com/ //npm.mycompany.com/:_authToken=${NPM_TOKEN} # Global .npmrc (~/.npmrc) # ব্যক্তিগত settings যেখানে API token থাকে # ⚠️ .gitignore-এ রাখো!

🔷 Access Tokens — CI/CD Integration

# npmjs.com-এ token তৈরি করো: # Account → Access Tokens → Generate New Token # Type: Automation (CI/CD-এর জন্য) # GitHub Actions-এ ব্যবহার: # Secret নামে NPM_TOKEN যোগ করো # .github/workflows/publish.yml: name: Publish on: release: types: [published] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' registry-url: 'https://registry.npmjs.org' - run: npm ci - run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏗️ npm Workspaces — Monorepo


🔷 Workspaces Setup ও ব্যবহার

// Root package.json { "name": "my-monorepo", "private": true, "workspaces": [ "packages/*", "apps/*" ] } // Structure: my-monorepo/ ├── package.json ← root ├── packages/ │ ├── utils/ │ │ └── package.json ← "@myapp/utils" │ └── ui/ │ └── package.json ← "@myapp/ui" └── apps/ └── web/ └── package.json ← depends on @myapp/utils
# Root-এ npm install → সব workspace install npm install # Workspace-এ package যোগ করো npm install react -w apps/web npm install react --workspace=apps/web # same # সব workspace-এ script চালাও npm run build --workspaces npm run test -ws # shorthand # নির্দিষ্ট workspace-এ script চালাও npm run build --workspace=apps/web # Workspace-এর মধ্যে dependency (local) # apps/web/package.json: { "dependencies": { "@myapp/utils": "*" # workspace-এর utils ব্যবহার করো } } # Workspace list দেখো npm query .workspace

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔧 npm-এর অতিরিক্ত গুরুত্বপূর্ণ কমান্ড


🔷 npm link — Local Development

Local-এ একটি package তৈরি করছো এবং অন্য project-এ test করতে চাও? npm link দিয়ে publish না করেই local package ব্যবহার করা যায়।

# ধাপ ১: package-টি global-এ symlink করো cd my-local-package npm link # Output: /usr/local/lib/node_modules/my-pkg → /path/to/my-local-package # ধাপ ২: অন্য project-এ সেই package ব্যবহার করো cd ../my-other-project npm link my-local-package # ধাপ ৩: কাজ শেষে unlink করো npm unlink my-local-package # project থেকে cd ../my-local-package npm unlink # global থেকে # Alternative: relative path দিয়ে install (সহজ পদ্ধতি) npm install ../my-local-package

🔷 npm dedupe ও npm prune

# ━━━━━━ dedupe: duplicate packages সরাও ━━━━━━ npm dedupe npm ddp # shorthand # node_modules-এ একাধিক version থাকলে, # compatible হলে একটাতে নামিয়ে আনো # ━━━━━━ prune: অপ্রয়োজনীয় packages সরাও ━━━━━━ npm prune npm prune --production # devDependencies মুছো (production-এর জন্য) # package.json-এ নেই কিন্তু node_modules-এ আছে # সেগুলো মুছে দেয়

🔷 npm diff — Package পার্থক্য দেখো

# দুটো version-এর পার্থক্য দেখো npm diff express@4.17.0 express@4.18.0 # Current installed vs latest npm diff express # Specific files-এর diff npm diff express --diff-name-only # শুধু changed files

🔷 npm fund ও npm doctor

# ━━━━━━ npm fund ━━━━━━ # কোন installed packages funding চাইছে দেখো npm fund npm fund lodash # নির্দিষ্ট package-এর funding info # Funding info suppress করতে: npm config set fund false # ━━━━━━ npm doctor ━━━━━━ # npm environment health check করো npm doctor # Check করবে: # ✔ npm ping # ✔ npm -v (সর্বশেষ version?) # ✔ node -v (সঠিক version?) # ✔ npm config get registry # ✔ Git available? # ✔ node_modules writable?

🔷 npm pkg — package.json সরাসরি Edit করো

# package.json-এর field দেখো npm pkg get name npm pkg get version npm pkg get scripts.build # Field সেট করো npm pkg set name="new-name" npm pkg set version="2.0.0" npm pkg set scripts.dev="nodemon index.js" npm pkg set engines.node=">=18.0.0" # Field মুছো npm pkg delete scripts.dev # Nested field npm pkg set scripts.dev="nodemon" --json # JSON parsing

🔷 Organizations — Team Package Management

# Organization তৈরি ও manage করো npm org create my-org # npm website-এ করাই ভালো # Organization-এর package publish করো # package.json: "name": "@my-org/my-package" npm publish --access public # public org package npm publish # private org package # Members manage করো npm org set @my-org username developer # role দাও npm org rm @my-org username # member মুছো npm org ls @my-org # সব member দেখো # Team manage করো (website থেকে সহজ) # npmjs.com → @my-org → Teams

🔷 npm cache ম্যানেজমেন্ট

# Cache কোথায় আছে? npm config get cache # ~/.npm (default) # Cache status দেখো npm cache verify # Cache সম্পূর্ণ মুছো npm cache clean --force # কী আছে cache-এ দেখো npm cache ls # deprecated, এখন সরাসরি ফোল্ডার দেখো

🔷 npm profile — Account Settings CLI-তে

# Profile দেখো npm profile get # Profile আপডেট করো npm profile set fullname "Farid Rahman" npm profile set email "farid@example.com" npm profile set twitter "fariddev" # Password পরিবর্তন করো npm profile set password

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🟦 pnpm — Performant npm

pnpm হলো npm-এর দ্রুততম ও সবচেয়ে disk-efficient বিকল্প। Content-addressable store দিয়ে disk space বাঁচায়।


🔷 pnpm কেন তৈরি হলো ও কী সুবিধা?

২০১৭ সালে Zoltan Kochan pnpm তৈরি করেন। npm-এর দুটো বড় সমস্যা ছিল: disk space অপচয় (প্রতিটি প্রজেক্টে একই package আলাদাভাবে থাকত) এবং ghost dependencies (package.json-এ নেই কিন্তু import করা যেত)।

npm-এর সমস্যা: project-a/node_modules/lodash@4.17.21 (5 MB) project-b/node_modules/lodash@4.17.21 (5 MB আরো!) project-c/node_modules/lodash@4.17.21 (5 MB আরো!) pnpm-এর সমাধান: ~/.pnpm-store/lodash@4.17.21 (5 MB — শুধু একবার!) project-a/node_modules/lodash → hard link ← 0 MB project-b/node_modules/lodash → hard link ← 0 MB project-c/node_modules/lodash → hard link ← 0 MB ✅ disk space ৯০% পর্যন্ত বাঁচতে পারে!
সুবিধা বিবরণ
Disk space বাঁচায় Global content-addressable store — একই package একবার download
দ্রুত install cache থেকে hard link — no copying
Strict node_modules package.json-এ না থাকলে import করা যায় না (ghost dependency নেই)
Monorepo-বান্ধব শক্তিশালী workspaces, filtering
npm compatible package.json, .npmrc সব কাজ করে
⚠️ Ghost Dependency কী?
npm-এ flat node_modules structure-এ তুমি এমন package import করতে পারো যা তোমার package.json-এ নেই কিন্তু কোনো dependency-র dependency হিসেবে install হয়েছে। এটি একটি বড় bug — production-এ সেই dependency update/remove হলে তোমার code ভাঙবে। pnpm এটি সম্পূর্ণ বন্ধ করে।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ pnpm ইনস্টল করা


🔷 pnpm Installation

# পদ্ধতি ১: npm দিয়ে (সবচেয়ে সহজ) npm install -g pnpm # পদ্ধতি ২: Standalone script # macOS/Linux: curl -fsSL https://get.pnpm.io/install.sh | sh - # Windows (PowerShell): iwr https://get.pnpm.io/install.ps1 -useb | iex # পদ্ধতি ৩: Corepack (Node.js 16.13+ built-in) corepack enable corepack prepare pnpm@latest --activate # পদ্ধতি ৪: Homebrew (macOS) brew install pnpm # যাচাই করো pnpm --version # 9.x.x বা তার বেশি
# pnpm নিজেকে আপডেট করো pnpm self-update pnpm self-update --version 9.0.0 ← নির্দিষ্ট version
Corepack হলো সেরা পদ্ধতি। Node.js 16.13+-এ Corepack built-in। এটি দিয়ে package.json-এ "packageManager": "pnpm@9.0.0" লিখলে টিমের সবাই automatically সেই exact version ব্যবহার করবে।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

💻 pnpm কমান্ড সমূহ


🔷 npm vs pnpm কমান্ড তুলনা

npm pnpm কাজ
npm install pnpm install সব dependency install
npm install express pnpm add express package যোগ করো
npm install -D jest pnpm add -D jest devDependency যোগ
npm install -g nodemon pnpm add -g nodemon global install
npm uninstall express pnpm remove express package মুছো
npm update pnpm update packages update
npm run build pnpm build script চালাও
npx create-vite pnpm dlx create-vite one-time execute
npm ci pnpm install --frozen-lockfile exact lockfile install
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Package যোগ করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ pnpm add express # dependencies pnpm add -D jest eslint # devDependencies pnpm add -O optional-pkg # optionalDependency pnpm add -g nodemon # global pnpm add express@4.18.0 # নির্দিষ্ট version pnpm add express@latest # সর্বশেষ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Interactive update # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ pnpm update --interactive # কোনটা update করবে বেছে নাও pnpm update --latest # SemVer ignore করে latest নাও # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # অন্যান্য কমান্ড # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ pnpm list # installed packages pnpm outdated # outdated packages pnpm audit # security check pnpm store path # store-এর location pnpm store status # store-এর অবস্থা # Short aliases (v11 থেকে) pn install # pnpm-এর alias pnx create-vite # pnpm dlx-এর alias

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🗄️ pnpm Content-addressable Store


🔷 Store কীভাবে কাজ করে?

পুরনো পদ্ধতি (npm): ~/project-a/node_modules/react/ (কপি) ~/project-b/node_modules/react/ (আরেকটি কপি) ~/project-c/node_modules/react/ (আরেকটি কপি) মোট: 3 কপি × 5MB = 15MB pnpm-এর পদ্ধতি: ~/.local/share/pnpm/store/react@18.2.0/ (মূল ফাইল — একবারই!) ~/project-a/node_modules/react → hard link (0 bytes extra) ~/project-b/node_modules/react → hard link (0 bytes extra) ~/project-c/node_modules/react → hard link (0 bytes extra) মোট: 1 কপি = 5MB ✅
# Store management কমান্ড pnpm store path # Store কোথায় আছে? pnpm store status # Integrity check pnpm store prune # অব্যবহৃত packages মুছো pnpm store add express # Package শুধু store-এ রাখো # Default store location: # Linux: ~/.local/share/pnpm/store # macOS: ~/Library/pnpm/store # Windows: %LOCALAPPDATA%\pnpm\store
# Virtual store structure (node_modules-এ) node_modules/ ├── .pnpm/ ← virtual store │ ├── express@4.18.2/ │ │ └── node_modules/ │ │ ├── express → (store-এ hard link) │ │ └── (express-এর dependencies) │ └── react@18.2.0/ │ └── node_modules/ │ └── react → (store-এ hard link) ├── express → .pnpm/express@4.18.2/node_modules/express └── react → .pnpm/react@18.2.0/node_modules/react # এটাই "strict" — শুধু declared packages accessible

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏗️ pnpm Workspaces — Monorepo


🔷 pnpm Workspace Setup

# pnpm-workspace.yaml তৈরি করো (root-এ) cat pnpm-workspace.yaml: packages: - 'packages/*' - 'apps/*' - '!**/test/**' ← exclude করো
# Workspace commands pnpm install # সব workspace install # নির্দিষ্ট workspace-এ package যোগ pnpm add react --filter @myapp/web pnpm add --filter "./packages/**" lodash # pattern match # Workspace-এর script চালাও pnpm run build --filter @myapp/web pnpm run test --filter "..." # সব workspace # --filter এর বিভিন্ন pattern pnpm --filter @myapp/api build # নির্দিষ্ট package pnpm --filter "...{./packages/utils}"... build # utils ও তার dependents pnpm --filter "[main]" test # git-এ changed packages # Workspace-এর মধ্যে dependency pnpm add @myapp/utils --filter @myapp/web --workspace

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ pnpm Config — .npmrc ও pnpm-workspace.yaml


🔷 pnpm Configuration

# .npmrc ফাইলে pnpm-specific settings # Hoisting এর level (strict = no hoisting) public-hoist-pattern[]=eslint* public-hoist-pattern[]=*prettier* # Auto-install peers auto-install-peers=true # Registry registry=https://registry.npmjs.org/ # Store location store-dir=~/.pnpm-store # Node linker (নতুন isolated mode) node-linker=hoisted ← npm-style (compatibility) node-linker=isolated ← pnpm-style (strict, default) node-linker=pnp ← Plug'n'Play mode
# pnpm config management pnpm config set registry https://registry.npmjs.org/ pnpm config get registry pnpm config list

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🧶 Yarn — Fast, Reliable, Secure

Facebook (Meta) ২০১৬ সালে npm-এর সীমাবদ্ধতা দূর করতে Yarn তৈরি করেন। Workspaces, lockfile reliability এবং offline installation-এ পথিকৃৎ।


🔷 Yarn-এর ইতিহাস ও বৈশিষ্ট্য

২০১৬ সালে Facebook engineer-রা npm v2-এর সমস্যা (ধীর গতি, inconsistent installs) সমাধানে Yarn তৈরি করেন। Yarn প্রথম package manager যা deterministic lockfile (yarn.lock) এনেছিল — পরে npm-ও package-lock.json যোগ করে।

Yarn Classic (v1) এবং Yarn Berry (v2, v3, v4) — দুটো ভিন্ন জিনিস। এই সেকশনে Yarn Classic (v1) কভার করা হয়েছে কারণ এটি এখনো widely used।

সুবিধা বিবরণ
Deterministic installs yarn.lock দিয়ে সবার install হুবহু একই
Parallel download একসাথে অনেক package download করে — দ্রুত
Offline mode Cache থেকে install — internet ছাড়াও কাজ করে
Workspaces npm-এর আগে Workspaces এনেছিল, monorepo-র জন্য
Checksum verification প্রতিটি package-এর integrity verify করে
Clean output npm-এর চেয়ে পরিষ্কার ও কম verbose output

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ Yarn ইনস্টল করা


🔷 Yarn Installation (Classic v1)

# পদ্ধতি ১: npm দিয়ে (সহজ) npm install -g yarn # পদ্ধতি ২: Official installer # macOS/Linux: curl -o- -L https://yarnpkg.com/install.sh | bash # পদ্ধতি ৩: Homebrew (macOS) brew install yarn # পদ্ধতি ৪: Corepack (সেরা পদ্ধতি) corepack enable corepack prepare yarn@1.22.19 --activate # যাচাই yarn --version # 1.22.x
# Yarn আপডেট করো yarn set version classic ← classic/stable version yarn set version 1.22.19 ← নির্দিষ্ট version

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

💻 Yarn কমান্ড সমূহ


🔷 Yarn-এর প্রধান কমান্ড

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # প্রজেক্ট শুরু করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ yarn init # package.json তৈরি (প্রশ্ন করবে) yarn init -y # সব default নাও
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Package ইনস্টল # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ yarn # সব dependencies install (yarn install) yarn install # একই কথা # Offline mode yarn install --offline # শুধু cache থেকে yarn install --frozen-lockfile # lockfile update করবে না (CI-এর জন্য) yarn install --production # শুধু dependencies (devDependencies skip)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Package যোগ করা — yarn add # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ yarn add express # dependency yarn add -D jest # devDependency yarn add --dev eslint # devDependency (একই) yarn add -P react # peerDependency yarn add -O fsevents # optionalDependency yarn add -g nodemon # global install # নির্দিষ্ট version yarn add express@4.18.0 yarn add express@^4.0.0 yarn add react@latest # Git URL থেকে yarn add git+https://github.com/user/repo.git # Tilde mode (~) — minor version lock yarn add express --tilde # ^4.18.x পরিবর্তে ~4.18.x # Workspace root-এ yarn add lerna -W # -W = workspace root ignore check
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Package মুছা ও আপডেট # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ yarn remove express # package মুছো yarn upgrade # সব packages update (semver range-এ) yarn upgrade express # নির্দিষ্ট package update yarn upgrade express@4.18.0 # নির্দিষ্ট version-এ update yarn upgrade --latest # সব packages latest version # Interactive upgrade (টিক দিয়ে বেছে নাও) yarn upgrade-interactive yarn upgrade-interactive --latest
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Script চালানো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ yarn start # npm run start-এর মতো yarn test # npm run test-এর মতো yarn run build # custom script yarn build # shorthand (script name conflict না থাকলে) # Arguments pass করো yarn build --watch yarn test --verbose
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # অন্যান্য দরকারি কমান্ড # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ yarn list # installed packages yarn list --depth=0 # শুধু top-level yarn info express # package-এর তথ্য yarn info express versions # সব versions yarn cache list # cache-এ কী আছে yarn cache dir # cache location yarn cache clean # cache মুছো yarn check # package integrity check yarn why express # কেন express install হয়েছে yarn link # local package link yarn unlink # link মুছো yarn login # npmjs.com login yarn logout # logout yarn publish # package publish
npm Yarn কাজ
npm install yarn সব install
npm install express yarn add express package যোগ
npm install -D jest yarn add -D jest devDep যোগ
npm install -g yarn global add global install
npm uninstall yarn remove মুছো
npm update yarn upgrade update
npm run build yarn build script চালাও
npx yarn dlx one-time execute

🔷 Global Package Management

# Global packages (সব project-এ accessible) yarn global add nodemon yarn global add create-react-app # Global packages দেখো yarn global list # Global package location yarn global bin # executables কোথায় yarn global dir # packages কোথায় # মুছো yarn global remove nodemon # ⚠️ Note: Yarn-এ global command আলাদাভাবে আসে # "yarn global add" ঠিক, কিন্তু # "yarn add global package" ← ভুল! (global আলাদা package হিসেবে install হবে)

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🔒 yarn.lock — Deterministic Lockfile


🔷 yarn.lock কেন npm-এর চেয়ে ভালো ছিল?

Yarn-ই প্রথম একটি human-readable, flat lockfile এনেছিল। npm-এর package-lock.json complex JSON হলেও yarn.lock পড়তে সহজ।

# yarn.lock ফাইলের উদাহরণ: express@^4.18.2: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#..." integrity sha512-... dependencies: accepts "~1.3.8" body-parser "1.20.1" ... # → মানুষ পড়তে পারে, diff করতে পারে, review করতে পারে
yarn.lock সবসময় commit করো। এটি না করলে CI-তে ভিন্ন version install হতে পারে। শুধু node_modules/ .gitignore-এ রাখো।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏗️ Yarn Workspaces


🔷 Yarn Workspaces Setup

// Root package.json { "private": true, // ← অবশ্যই private: true "workspaces": [ "packages/*", "apps/*" ] }
my-monorepo/ ├── package.json ← root ├── packages/ │ ├── utils/ │ │ └── package.json ← "name": "@myapp/utils" │ └── components/ │ └── package.json ← "name": "@myapp/components" └── apps/ └── web/ └── package.json ← depends on @myapp/utils
# Workspace commands yarn install # সব workspace-এর dependencies install # নির্দিষ্ট workspace-এ কাজ করো yarn workspace @myapp/web add react # package যোগ yarn workspace @myapp/web build # script চালাও yarn workspace @myapp/utils test # সব workspace-এ script চালাও yarn workspaces run build yarn workspaces run test # Workspace info দেখো yarn workspaces info # Workspace-এর dependency tree yarn workspaces info --json

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ Yarn Config ও .yarnrc


🔷 Yarn Configuration

# Config management yarn config list # সব config দেখো yarn config get registry # নির্দিষ্ট config দেখো yarn config set registry https://registry.npmjs.org/ yarn config set save-prefix "~" # ^ পরিবর্তে ~ ব্যবহার yarn config delete save-prefix # delete করো
# .yarnrc ফাইল (project root-এ) registry "https://registry.npmjs.org/" save-prefix "^" strict-ssl true yarn-offline-mirror "./offline-mirror" # Offline mirror # yarn install করলে packages একটি ফোল্ডারে সংরক্ষণ হবে # পরে internet ছাড়াও install করা যাবে
# Offline installation # ধাপ ১: Mirror সেট করো yarn config set yarn-offline-mirror ./npm-packages-offline-cache yarn config set yarn-offline-mirror-pruning true # ধাপ ২: Online-এ একবার install করো (mirror তৈরি হবে) yarn install # ধাপ ৩: Offline-এ install করো yarn install --offline

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🥟 Bun — All-in-One JavaScript Toolkit

Bun হলো JavaScript ecosystem-এর সবচেয়ে নতুন ও দ্রুত টুল। Runtime, Package Manager, Test Runner ও Bundler — একটিতেই সব।


🔷 Bun কী এবং কেন এত বিশেষ?

২০২২ সালে Jarred Sumner (Oven-sh) Bun তৈরি করেন। Zig ভাষায় লেখা এবং V8 (Chrome)-এর পরিবর্তে JavaScriptCore (Safari) engine ব্যবহার করে। এই দুটো কারণে Bun অবিশ্বাস্য রকম দ্রুত।

Node.js ecosystem: Runtime: Node.js Package Manager: npm / pnpm / yarn Test Runner: Jest / Vitest Bundler: webpack / esbuild / rollup TypeScript: tsx / ts-node লাগে Bun ecosystem: Runtime: bun ← একটাই! Package Manager: bun Test Runner: bun test Bundler: bun build TypeScript: সরাসরি চলে! কোনো setup নেই!
Bun-এর গতির তুলনা:
Package install: npm-এর চেয়ে ৩০x দ্রুত
Test runner: Jest-এর চেয়ে ১০-৩০x দ্রুত
Startup time: Node.js-এর চেয়ে ৩-৫x দ্রুত
TypeScript: transpile ছাড়াই সরাসরি চলে
বৈশিষ্ট্য Node.js + npm Bun
Runtime engine V8 (Google) JavaScriptCore (Apple/Safari)
Written in C++ Zig + C++
TypeScript Compile করতে হয় সরাসরি চলে
JSX Babel/esbuild লাগে সরাসরি চলে
Node.js compat. 100% (এটাই Node) ~95%+ (চলতে থাকছে)
Web APIs Partial Fetch, WebSocket, ReadableStream built-in
⚠️ Bun কখন এড়াবে:
→ Legacy project যা Node.js-specific behavior-এ নির্ভরশীল
→ Native module (C++ addon) heavy project
→ Production-এ অত্যন্ত critical system যেখানে ৯৫%+ compat. যথেষ্ট নয়
→ শুরুতে: Node.js + npm শেখো, তারপর Bun explore করো

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚙️ Bun ইনস্টল করা


🔷 Bun Installation

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # macOS ও Linux (সবচেয়ে সহজ) # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ curl -fsSL https://bun.com/install | bash # বা npm দিয়ে npm install -g bun # Homebrew (macOS) brew tap oven-sh/bun brew install bun
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Windows # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # PowerShell দিয়ে: powershell -c "irm bun.sh/install.ps1 | iex" # npm দিয়ে: npm install -g bun
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Docker # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ docker pull oven/bun docker run --rm --init oven/bun bun --version
# যাচাই করো bun --version # 1.x.x # Bun আপডেট করো bun upgrade bun upgrade --version 1.2.0 # নির্দিষ্ট version

প্রজেক্ট শুরু করা

# নতুন প্রজেক্ট bun init # interactive setup bun init -y # সব default নাও # Template দিয়ে তৈরি করো bun create react my-app # React bun create next my-app # Next.js bun create vite my-app # Vite bun create hono my-app # Hono (API framework) # package.json দেখো cat package.json

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📦 Bun Package Manager

Bun-এর package manager npm-compatible। npm, yarn, pnpm-এর lockfile পড়তে পারে।


🔷 Package Management কমান্ড

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Install # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bun install # সব dependencies install bun i # shorthand # Frozen lockfile (CI/CD-এর জন্য) bun install --frozen-lockfile bun ci # shorthand # Production mode bun install --production # Verbose / Silent bun install --verbose bun install --silent
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Package যোগ করা # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bun add express # dependency bun add -D jest # devDependency bun add -g nodemon # global bun add express@4.18.0 # নির্দিষ্ট version bun add express@latest # সর্বশেষ # Git থেকে bun add github:user/repo bun add git+https://github.com/user/repo.git # Text lockfile generate করো bun install --save-text-lockfile ← human-readable bun.lock
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Remove ও Update # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bun remove express # package মুছো bun remove -D jest # devDependency মুছো bun update # সব update bun update express # নির্দিষ্ট package # Outdated packages দেখো bun outdated
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # bunx — npx-এর মতো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bunx create-react-app my-app # install না করে চালাও bunx cowsay "Hello Bun!" # bun pm — package manager utilities bun pm ls # installed packages bun pm cache rm # cache মুছো

npm-এর সাথে তুলনা

npm Bun কাজ
npm install bun install সব install
npm install express bun add express package যোগ
npm install -D jest bun add -D jest devDep যোগ
npm install -g nodemon bun add -g nodemon global
npm uninstall bun remove মুছো
npm ci bun ci frozen install
npx bunx one-time run

🔷 bun.lock — Bun Lockfile

Bun তিনটি lockfile format সাপোর্ট করে। এটি npm/yarn/pnpm থেকে migration সহজ করে।

# Lockfile migration # npm থেকে Bun-এ: # package-lock.json আছে? Bun automatically read করবে # pnpm থেকে: # pnpm-lock.yaml আছে? Bun automatically convert করবে # Yarn থেকে: # yarn.lock আছে? Bun automatically convert করবে # Bun-এর নিজের lockfile: # Binary format: bun.lockb (দ্রুত, default) # Text format: bun.lock (human-readable, Git-এ ভালো) # Text lockfile তৈরি করো: bun install --save-text-lockfile

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

⚡ Bun Runtime ও Script Runner

Bun শুধু package manager নয় — এটি Node.js-compatible runtime। TypeScript ও JSX সরাসরি চালানো যায়।


🔷 JavaScript ও TypeScript চালানো

# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # File চালানো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bun run index.js # JavaScript bun run index.ts # TypeScript (সরাসরি! tsx লাগে না) bun run index.tsx # React TSX bun run index.jsx # React JSX # Shorthand bun index.js bun index.ts
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # npm scripts চালানো # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bun run start # "start" script চালাও bun run dev # "dev" script bun run build # "build" script bun run test # "test" script # Shorthand (script name collision নেই তো?) bun start bun dev bun build
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Watch mode — file change-এ auto restart # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ bun --watch run index.ts bun --hot run index.ts ← hot reload (state preserve)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Node.js API compatibility উদাহরণ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ // server.ts — TypeScript, Node.js API ব্যবহার import { createServer } from "http"; import { readFileSync } from "fs"; import path from "path"; const server = createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/plain" }); res.end("Hello from Bun!"); }); server.listen(3000, () => { console.log("Server running on port 3000"); }); // চালানো: bun server.ts // কোনো compile step নেই!
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ # Bun.serve — Built-in HTTP server (দ্রুত) # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ // app.ts import { serve } from "bun"; const server = serve({ port: 3000, routes: { "/": new Response("Welcome!"), "/api/hello": (req) => Response.json({ message: "Hello Bun!" }), }, }); console.log(`Server at http://localhost:${server.port}`);

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🧪 Bun Test Runner

Bun-এর built-in test runner Jest-compatible। Jest থেকে migrate করতে সহজ।


🔷 bun test — Jest-compatible Testing

# Test চালানো bun test # সব test ফাইল bun test src/utils.test.ts # নির্দিষ্ট ফাইল bun test --watch # watch mode bun test --coverage # code coverage # Pattern matching bun test --test-name-pattern "login" # Parallel bun test --parallel
// utils.test.ts — Jest-compatible syntax! import { describe, it, expect, beforeEach } from "bun:test"; import { add, multiply } from "./utils"; describe("Math utils", () => { it("should add two numbers", () => { expect(add(2, 3)).toBe(5); }); it("should multiply two numbers", () => { expect(multiply(3, 4)).toBe(12); }); }); describe("String utils", () => { it("should handle async", async () => { const result = await fetchData(); expect(result).toBeString(); }); }); // Mock করা import { mock, spyOn } from "bun:test"; const mockFetch = mock(() => Promise.resolve("mocked"));
Jest → Bun migration: বেশিরভাগ ক্ষেত্রে শুধু import পরিবর্তন করলেই হয়: import { describe, it, expect } from "bun:test" এবং bun test কমান্ড দিলে test চলবে।

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📦 Bun Bundler — bun build

Bun-এ built-in bundler আছে। webpack/esbuild/rollup আলাদাভাবে install করতে হয় না।


🔷 bun build — Bundle করা

# সাধারণ build bun build ./src/index.ts --outdir ./dist # Production build (minify) bun build ./src/index.ts --outdir ./dist --minify # Browser target bun build ./src/app.tsx --outdir ./dist --target browser # Node.js target bun build ./src/server.ts --outdir ./dist --target node # Sourcemap bun build ./src/index.ts --outdir ./dist --sourcemap # Single file (self-contained executable!) bun build ./src/cli.ts --compile --outfile my-tool # CSS ও assets bun build ./src/styles.css --outdir ./dist
# Build API (code-এ ব্যবহার করা) const result = await Bun.build({ entrypoints: ["./src/index.tsx"], outdir: "./dist", minify: true, target: "browser", define: { "process.env.NODE_ENV": JSON.stringify("production"), }, }); if (!result.success) { console.error("Build failed:", result.logs); }

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

🏗️ Bun Workspaces — Monorepo


🔷 Bun Workspace Setup

// Root package.json { "name": "my-monorepo", "workspaces": [ "packages/*", "apps/*" ] }
# সব workspace install bun install # নির্দিষ্ট workspace-এ script চালাও bun run --filter @myapp/web build bun run --filter @myapp/api dev # Pattern matching bun run --filter 'pkg-*' build # pkg- দিয়ে শুরু সব bun run --filter '*' test # সব workspace # নির্দিষ্ট workspace-এ package যোগ করো bun add react --filter @myapp/web

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!

📋 সম্পূর্ণ Command Reference — npm · pnpm · Yarn · Bun

চারটি package manager-এর প্রতিটি গুরুত্বপূর্ণ কমান্ড বিষয় অনুযায়ী ভাগ করে একসাথে দেওয়া হয়েছে — চট করে খুঁজে নাও।


🔷 ১. ইনস্টল ও প্রজেক্ট শুরু

কাজ npm pnpm Yarn Bun
Manager ইনস্টল Node.js-এ আসে npm i -g pnpm npm i -g yarn curl -fsSL https://bun.com/install | bash
Version দেখো npm --version pnpm --version yarn --version bun --version
নিজেকে update npm install -g npm@latest pnpm self-update yarn set version classic bun upgrade
প্রজেক্ট init npm init -y pnpm init yarn init -y bun init -y
Template দিয়ে তৈরি npx create-vite my-app pnpm dlx create-vite my-app yarn dlx create-vite my-app bunx create-vite my-app
Environment check npm doctor

🔷 ২. Dependencies ইনস্টল করা

কাজ npm pnpm Yarn Bun
সব dependencies install npm install pnpm install yarn bun install
Frozen install (CI/CD) npm ci pnpm install --frozen-lockfile yarn --frozen-lockfile bun ci
Production only npm install --production pnpm install --prod yarn install --production bun install --production
Dependency যোগ npm install <pkg> pnpm add <pkg> yarn add <pkg> bun add <pkg>
devDependency যোগ npm install -D <pkg> pnpm add -D <pkg> yarn add -D <pkg> bun add -D <pkg>
optionalDependency যোগ npm install -O <pkg> pnpm add -O <pkg> yarn add -O <pkg> bun add --optional <pkg>
peerDependency যোগ npm install --save-peer <pkg> pnpm add --save-peer <pkg> yarn add -P <pkg> bun add --peer <pkg>
Global install npm install -g <pkg> pnpm add -g <pkg> yarn global add <pkg> bun add -g <pkg>
নির্দিষ্ট version npm install <pkg>@4.0.0 pnpm add <pkg>@4.0.0 yarn add <pkg>@4.0.0 bun add <pkg>@4.0.0
Git repo থেকে npm install github:user/repo pnpm add github:user/repo yarn add user/repo bun add github:user/repo
Local path থেকে npm install ../my-pkg pnpm add ../my-pkg yarn add file:../my-pkg bun add ../my-pkg

🔷 ৩. Package মুছা ও আপডেট

কাজ npm pnpm Yarn Bun
Package মুছো npm uninstall <pkg> pnpm remove <pkg> yarn remove <pkg> bun remove <pkg>
Global মুছো npm uninstall -g <pkg> pnpm remove -g <pkg> yarn global remove <pkg> bun remove -g <pkg>
সব update npm update pnpm update yarn upgrade bun update
Latest-এ update npm install <pkg>@latest pnpm update --latest yarn upgrade --latest bun add <pkg>@latest
Interactive update npx npm-check-updates -u pnpm update -i yarn upgrade-interactive
Outdated দেখো npm outdated pnpm outdated yarn outdated bun outdated

🔷 ৪. Package তথ্য ও তালিকা

কাজ npm pnpm Yarn Bun
Installed list (top) npm ls --depth=0 pnpm list --depth=0 yarn list --depth=0 bun pm ls
Global list npm ls -g --depth=0 pnpm ls -g yarn global list
Package info npm info <pkg> pnpm info <pkg> yarn info <pkg>
কেন installed? npm why <pkg> pnpm why <pkg> yarn why <pkg>
Registry search npm search <term>
Docs/homepage খোলো npm docs <pkg>

🔷 ৫. Script ও Execute

কাজ npm pnpm Yarn Bun
Custom script চালাও npm run <script> pnpm <script> yarn <script> bun <script>
start script npm start pnpm start yarn start bun start
test script npm test pnpm test yarn test bun test
Script-এ args pass npm run build -- --watch pnpm build -- --watch yarn build --watch bun build --watch
One-time execute (npx) npx <pkg> pnpm dlx <pkg> yarn dlx <pkg> bunx <pkg>
Local binary চালাও npx jest pnpm exec jest yarn exec jest bunx jest
File সরাসরি চালাও node file.js bun file.ts (TS সরাসরি)

🔷 ৬. Version ও Publishing

কাজ npm pnpm Yarn Bun
Version bump (patch) npm version patch pnpm version patch yarn version --patch bun version patch
Version bump (minor) npm version minor pnpm version minor yarn version --minor bun version minor
Version bump (major) npm version major pnpm version major yarn version --major bun version major
Package publish npm publish pnpm publish yarn publish bun publish
Public scoped publish npm publish --access public pnpm publish --access public yarn publish --access public bun publish --access public
Tag দিয়ে publish npm publish --tag beta pnpm publish --tag beta yarn publish --tag beta
Tarball preview npm pack --dry-run pnpm pack --dry-run yarn pack --dry-run bun pack
Deprecate করো npm deprecate <pkg> "msg"
Dist-tag যোগ npm dist-tag add <pkg>@ver tag
Login npm login pnpm login yarn login bun login
Logout npm logout pnpm logout yarn logout
Provenance publish npm publish --provenance

🔷 ৭. Security ও Audit

কাজ npm pnpm Yarn Bun
Vulnerability check npm audit pnpm audit yarn audit
Auto fix npm audit fix pnpm audit --fix
Force fix (breaking ok) npm audit fix --force
Signature verify npm audit signatures
2FA চালু npm profile enable-2fa auth-and-writes
OTP সহ publish npm publish --otp=123456 pnpm publish --otp=123456 yarn publish --otp=123456
Integrity check npm ci (lockfile verify) pnpm install --frozen-lockfile yarn check bun install --frozen-lockfile

🔷 ৮. Lockfile, Config ও Cache

বিষয় npm pnpm Yarn Bun
Lockfile নাম package-lock.json pnpm-lock.yaml yarn.lock bun.lockb / bun.lock
Config ফাইল .npmrc .npmrc + pnpm-workspace.yaml .yarnrc bunfig.toml
Registry সেট করো npm config set registry <url> pnpm config set registry <url> yarn config set registry <url> bunfig.toml-এ
Registry দেখো npm config get registry pnpm config get registry yarn config get registry
সব config দেখো npm config list pnpm config list yarn config list
Config সম্পাদনা npm config edit
Cache location npm config get cache pnpm store path yarn cache dir
Cache মুছো npm cache clean --force pnpm store prune yarn cache clean bun pm cache rm
Cache verify npm cache verify pnpm store status

🔷 ৯. npm-এর বিশেষ কমান্ড

এই কমান্ডগুলো শুধু npm-এ আছে অথবা npm-এ সবচেয়ে বেশি ব্যবহৃত:

কমান্ড কাজ
npm link Local package globally symlink করো (development-এ test করতে)
npm link <pkg> Symlinked local package project-এ যোগ করো
npm unlink <pkg> Link মুছো
npm pack Package-এর .tgz tarball তৈরি করো
npm pack --dry-run কোন files publish হবে দেখো (publish না করে)
npm dedupe node_modules-এ duplicate packages কমাও
npm prune package.json-এ নেই এমন package মুছো
npm prune --production devDependencies মুছো (production deploy-এর আগে)
npm diff <pkg> Installed vs latest version-এর পার্থক্য দেখো
npm diff <v1> <v2> দুটো নির্দিষ্ট version-এর পার্থক্য
npm fund Installed packages-এর funding info দেখো
npm fund <pkg> নির্দিষ্ট package-এর funding
npm doctor npm environment health check
npm pkg get <field> package.json-এর field দেখো
npm pkg set <field>=<val> package.json-এর field সেট করো
npm pkg delete <field> package.json-এর field মুছো
npm explain <pkg> কেন এই package installed তা দেখাও
npm query .workspace সব workspace-এর list
npm ping Registry-র সাথে connection test
npm prefix npm prefix directory দেখো
npm find-dupes Duplicate packages খুঁজো
npm profile get npmjs.com account profile দেখো
npm profile set <k> <v> Profile field আপডেট করো
npm org ls <@org> Organization-এর সব member দেখো
npm org set <@org> <user> <role> Member-এর role সেট করো
npm access list packages <@org> Org-এর সব package দেখো
npm dist-tag add <pkg>@ver tag Dist tag যোগ করো
npm dist-tag ls <pkg> সব dist tag দেখো

🔷 ১০. Workspaces — Monorepo কমান্ড

কাজ npm pnpm Yarn Bun
সব workspace install npm install (root-এ) pnpm install yarn install bun install
Workspace-এ pkg যোগ npm install react -w apps/web pnpm add react --filter apps/web yarn workspace apps/web add react bun add react --filter apps/web
নির্দিষ্ট ws script npm run build -w apps/web pnpm build --filter apps/web yarn workspace apps/web build bun run build --filter apps/web
সব ws-এ script npm run build -ws pnpm build --filter '*' yarn workspaces run build bun run build --filter '*'
Workspace list npm query .workspace pnpm list -r yarn workspaces info

🔷 ১১. SemVer Version Range — চটজলদি গাইড

package.json-এ অর্থ কোন version নেবে?
"4.18.2" Exact শুধু 4.18.2
"^4.18.2" MAJOR lock (default) 4.18.2 ≤ x < 5.0.0
"~4.18.2" MINOR lock 4.18.2 ≤ x < 4.19.0
">=4.18.2" Greater or equal 4.18.2 থেকে সর্বোচ্চ
">=4.0.0 <5.0.0" Range 4.x.x মাত্র
"4.x" Major wildcard 4.0.0 থেকে 4.x.x
"*" Any ⚠️ সর্বশেষ (বিপজ্জনক)
"latest" Tag সর্বশেষ stable
"1.2.3 || 2.0.0" OR 1.2.3 অথবা 2.0.0

🔷 ১২. package.json — গুরুত্বপূর্ণ Field সমূহ

Field কাজ উদাহরণ
name Package-এর নাম "my-app"
version Current version (SemVer) "1.2.3"
private Accidental publish বন্ধ true
main CJS entry point "dist/index.js"
module ESM entry point "dist/index.mjs"
exports Conditional exports (modern) {".": {"import": ...}}
type ESM/CJS mode "module" বা "commonjs"
bin CLI executable {"my-cli": "./bin/cli.js"}
files Publish-এ কোন files যাবে ["dist/", "src/"]
scripts npm run দিয়ে চালানো task {"build": "webpack"}
dependencies Production packages {"express": "^4.18.2"}
devDependencies Dev-only packages {"jest": "^29.0.0"}
peerDependencies Host-এ থাকা দরকার {"react": ">=17"}
engines Node.js version requirement {"node": ">=18.0.0"}
workspaces Monorepo workspace paths ["packages/*"]
license License type "MIT"
keywords npmjs.com search-এ ["web", "nodejs"]
repository Source code URL {"type": "git", "url": "..."}

🔷 সবচেয়ে বেশি ব্যবহৃত — Daily Cheatsheet

প্রতিদিন এই কমান্ডগুলোই লাগে: ━━━━━━━━━━ npm ━━━━━━━━━━ npm install # সব install npm install <pkg> # package যোগ npm install -D <pkg> # devDep যোগ npm uninstall <pkg> # package মুছো npm run <script> # script চালাও npm ci # CI-তে frozen install npm audit fix # security fix npm outdated # কোন update আছে? npm version patch # version বাড়াও npm publish # publish করো ━━━━━━━━━━ pnpm ━━━━━━━━━━ pnpm install # সব install pnpm add <pkg> # package যোগ pnpm add -D <pkg> # devDep যোগ pnpm remove <pkg> # package মুছো pnpm <script> # script চালাও ━━━━━━━━━━ Yarn ━━━━━━━━━━ yarn # সব install yarn add <pkg> # package যোগ yarn add -D <pkg> # devDep যোগ yarn remove <pkg> # package মুছো yarn <script> # script চালাও ━━━━━━━━━━ Bun ━━━━━━━━━━ bun install # সব install bun add <pkg> # package যোগ bun add -D <pkg> # devDep যোগ bun remove <pkg> # package মুছো bun <script> # script চালাও bun <file.ts> # TypeScript সরাসরি!
কোনটা বেছে নেবে?
শিখছো / শুরু করছো: npm — কোনো extra install নেই, সব জায়গায় সাপোর্ট
গতি ও disk space: pnpm — monorepo-তে সেরা, strict node_modules
Stable ও reliable: Yarn — yarn.lock সবার আগে, workspaces pioneer
All-in-one toolkit: Bun — TypeScript সরাসরি, test+bundle built-in, সবচেয়ে দ্রুত

মাশাআল্লাহ! 🎉 এই section শেষ করেছেন — অসাধারণ! প্রজেক্টের কোডগুলো দেখে দেখে VS Code-এ নিজে টাইপ করুন — copy-paste করবেন না। কারণ হাতে টাইপ করলেই স্মৃতিতে গেঁথে যায়, মাথায় থাকে, বাস্তব অভিজ্ঞতা হয়, সাহস বাড়ে। শুধু পড়ে বা দেখে কেউ কখনো developer হয়নি। চলুন পড়ি! হাতে কলমে শিখি!