npm (Node Package Manager) হল Node.js প্ল্যাটফর্মের জন্য স্ট্যান্ডার্ড প্যাকেজ ম্যানেজার, যা Node.js ইনস্টলেশনের সাথে অন্তর্ভুক্ত। npm JavaScript এবং TypeScript প্রকল্পের নির্ভরশীলতা পরিচালনা করে: লাইব্রেরি ইনস্টল করে node_modules-এ, প্যাকেজ সংস্করণ আপডেট করে, সংস্করণ দ্বন্দ্ব সমাধান করে। package.json হল মেটাডেটা এবং নির্ভরশীলতার তালিকা সহ কেন্দ্রীয় কনফিগারেশন ফাইল। npm Registry হল সবচেয়ে বড় প্যাকেজ রেজিস্ট্রি। আরও জানুন npm Registry-এ।
মূল বিষয়
npm 2010 সালে Isaac Schlueter দ্বারা Node.js নির্ভরশীলতা ব্যবস্থাপনার সমাধান হিসেবে তৈরি করা হয়েছিল। 2014 সাল থেকে npm, Inc. দ্বারা npm পরিচালিত হচ্ছে, যা 2020 সালে Microsoft/GitHub দ্বারা অধিগ্রহণ করা হয়েছিল। টুলটি দুটি অংশ নিয়ে গঠিত: CLI (কমান্ড লাইন) প্যাকেজ ইনস্টল এবং পরিচালনার জন্য, এবং Registry — registry.npmjs.org-এ সব প্রকাশিত মডিউলের কেন্দ্রীয় ভান্ডার।
npm Registry হল সবচেয়ে বড় প্যাকেজ রেজিস্ট্রি: ২ মিলিয়নের বেশি প্যাকেজ এবং মাসিক ১০ বিলিয়নের বেশি ডাউনলোড। প্রতিটি প্যাকেজের একটি SemVer সংস্করণ, বিবরণ, নির্ভরশীলতা, লাইসেন্স এবং লেখকত্ব রয়েছে। আপনার নিজের প্যাকেজ প্রকাশ করা হয় npm publish-এর মাধ্যমে। npm সংস্থাগুলির জন্য স্কোপড প্যাকেজ (@scope/package), প্রাইভেট রেজিস্ট্রি এবং বিল্ট-ইন নিরাপত্তা অডিট সমর্থন করে।
Node.js সংস্করণ 18+ উন্নত পারফরম্যান্স সহ npm 9+, মনোরিপোর জন্য ওয়ার্কস্পেস এবং পুনর্নির্মিত পিয়ার নির্ভরশীলতা প্রক্রিয়া অন্তর্ভুক্ত করে। npm ইকোসিস্টেম সার্ভার-সাইড JavaScript, ফ্রন্টএন্ড (React, Vue, Angular), মোবাইল ডেভেলপমেন্ট (React Native), বিল্ড টুল (Webpack, Vite) এবং CLI ইউটিলিটি কভার করে। npm হল JavaScript লাইব্রেরি বিতরণের প্রাথমিক চ্যানেল।
npm install — প্রধান কমান্ড যা সব নির্ভরশীলতা node_modules-এ ইনস্টল করতে package.json এবং package-lock.json পড়ে। প্রথম রানে, npm নির্ভরশীলতা গ্রাফ গণনা করে, সংস্করণ দ্বন্দ্ব সমাধান করে এবং package-lock.json জেনারেট করে। npm install <package> কমান্ড একটি নির্দিষ্ট প্যাকেজ ইনস্টল করে; --save-dev ফ্ল্যাগ এটি devDependencies-এ যোগ করে, --global গ্লোবালি ইনস্টল করে।
npx — npm সংস্করণ 5.2 থেকে অন্তর্ভুক্ত একটি প্যাকেজ রানার। npx গ্লোবাল ইনস্টলেশন ছাড়াই CLI ইউটিলিটি চালানোর অনুমতি দেয়: npx react-native init বা npx create-react-app my-app। npx প্যাকেজটি অস্থায়ী ক্যাশে ডাউনলোড করে, চালায় এবং শেষে পরিষ্কার করে। নির্দিষ্ট টুল সংস্করণ চালানোর জন্যও npx উপযোগী।
npm audit npm ডাটাবেস থেকে পরিচিত দুর্বলতার জন্য নির্ভরশীলতা ট্রি স্ক্যান করে। কমান্ডটি গুরুত্ব স্তর (ক্রিটিক্যাল, হাই, মডারেট) সহ একটি রিপোর্ট আউটপুট করে এবং দুর্বল প্যাকেজগুলি স্বয়ংক্রিয়ভাবে আপডেট করতে npm audit fix সুপারিশ করে। npm cache ডাউনলোড করা প্যাকেজগুলি স্থানীয়ভাবে সংরক্ষণ করে। npm cache clean --force ইনস্টলেশন সমস্যায় ক্যাশে পরিষ্কার করে। npm outdated পুরানো প্যাকেজ দেখায়।
# npm মৌলিক কমান্ড
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# গ্লোবাল ইনস্টলেশন ছাড়া চালানো
$ npx react-native init MyApp
# নিরাপত্তা অডিট
$ npm audit --fix
package.json হল প্রকল্প রুটে একটি JSON ফাইল যা এর মেটাডেটা, নির্ভরশীলতা এবং কনফিগারেশন বর্ণনা করে। বাধ্যতামূলক ফিল্ড: name (অনন্য প্যাকেজ নাম) এবং version (SemVer সংস্করণ, যেমন 1.0.0)। ফাইলটি দ্রুত আরম্ভের জন্য npm init -y দিয়ে বা ম্যানুয়ালি তৈরি করা হয়।
Semantic Versioning (SemVer) হলো MAJOR.MINOR.PATCH ফরম্যাটে একটি সংস্করণ মান। মেজর সংস্করণ অসামঞ্জস্যপূর্ণ API পরিবর্তনে পরিবর্তিত হয়, মাইনর — কার্যকারিতা যোগ করলে (পশ্চাদমুখী সামঞ্জস্যপূর্ণ), প্যাচ — বাগ ফিক্সে। সংস্করণের আগে ^ চিহ্ন মাইনর এবং প্যাচ আপডেটের অনুমতি দেয়, ~ শুধুমাত্র প্যাচ আপডেটের অনুমতি দেয়।
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| ফিল্ড | উদ্দেশ্য | উদাহরণ মান |
|---|---|---|
| scripts | npm run-এর জন্য কমান্ড চালান | "start": "node index.js" |
| dependencies | অ্যাপ্লিকেশনের প্রোডাকশন নির্ভরশীলতা | "react": "^18.3.0" |
| devDependencies | ডেভেলপমেন্ট এবং টেস্টিং টুল | "jest": "^29.7.0" |
| peerDependencies | লাইব্রেরির জন্য হোস্ট নির্ভরশীলতা | "react": ">=17.0.0" |
| engines | Node.js সংস্করণ প্রয়োজনীয়তা | {"node": ">=18.0.0"} |
React Native প্রকল্পগুলি নির্ভরশীলতা ব্যবস্থাপনার জন্য সক্রিয়ভাবে npm ব্যবহার করে। স্ট্যান্ডার্ড সেটে react, react-native, নেভিগেশন লাইব্রেরি (React Navigation), HTTP লাইব্রেরি (axios), স্টেট ম্যানেজমেন্ট (Redux, Zustand) এবং UI কম্পোনেন্ট অন্তর্ভুক্ত। npm রেজিস্ট্রি থেকে হাজার হাজার সামঞ্জস্যপূর্ণ প্যাকেজ ইনস্টল করার অনুমতি দেয়।
npx pod-install — iOS-এর জন্য React Native-এ নেটিভ মডিউল ইনস্টল করার পরে একটি বাধ্যতামূলক কমান্ড। npm স্বয়ংক্রিয়ভাবে package-lock.json-এর উপর ভিত্তি করে Podfile.lock জেনারেট করে। Expo প্রকল্পে npm install-এর পরিবর্তে expo install ব্যবহার করা হয়, কারণ এটি বর্তমান Expo SDK সংস্করণের সাথে সামঞ্জস্যপূর্ণ সংস্করণ নির্বাচন করে।
সংস্করণ দ্বন্দ্ব React Native-এ একটি সাধারণ সমস্যা: react-native-reanimated, react-native-gesture-handler এবং react-native-safe-area-context-এর সংযুক্ত সংস্করণ প্রয়োজন। সমাধান হল সব প্যাকেজ সর্বশেষ সামঞ্জস্যপূর্ণ সংস্করণে আপডেট করা বা --legacy-peer-deps ব্যবহার করা। CocoaPods এবং Gradle-এর মাধ্যমে কম্পাইল করা নেটিভ মডিউলের জন্য package-lock.json গুরুত্বপূর্ণ।
npm হল Node.js-এর সাথে অন্তর্ভুক্ত স্ট্যান্ডার্ড প্যাকেজ ম্যানেজার। প্রধান বিকল্পগুলি: yarn (2016 সালে Facebook দ্বারা তৈরি) এবং pnpm (দ্রুত, হার্ড লিঙ্ক সহ)। npm 5 থেকে, npm এবং yarn-এর মধ্যে গতি এবং কার্যকারিতার পার্থক্য ন্যূনতম। npm 7+ ওয়ার্কস্পেস যোগ করেছে, যা একে মনোরিপোর জন্য প্রতিযোগিতামূলক করে তোলে।
| বৈশিষ্ট্য | npm | yarn | pnpm |
|---|---|---|---|
| সৃষ্টির বছর | 2010 | 2016 | 2017 |
| লক ফাইল | package-lock.json | yarn.lock | pnpm-lock.yaml |
| ইনস্টলেশন | সিকোয়েন্সিয়াল (npm 5+) | সমান্তরাল | সমান্তরাল |
| ডিস্ক স্থান | স্ট্যান্ডার্ড | স্ট্যান্ডার্ড | সর্বনিম্ন (লিঙ্ক) |
| Workspaces | হ্যাঁ (npm 7+) | হ্যাঁ | হ্যাঁ |
| Plug'n'Play | না | হ্যাঁ | না |
State of JS 2025 অনুযায়ী: ৬২% ডেভেলপার npm ব্যবহার করেন, ৩৫% yarn (মূলত পুরানো প্রকল্প এবং PnP উত্সাহী), এবং ৩% pnpm ব্যবহার করেন। React Native প্রকল্পের জন্য, উভয় টুলই সমানভাবে কার্যকর, কিন্তু npm বেশি সাধারণ Expo SDK 50+ এবং নতুন React Native আরম্ভকরণে।
yarn অত্যন্ত বড় মনোরিপোতে (১০০+ প্যাকেজ) এর আরও পরিপক্ক ওয়ার্কস্পেস বাস্তবায়ন এবং Plug'n'Play-এর কারণে সুবিধা ধরে রেখেছে। pnpm গ্লোবাল স্টোরে হার্ড লিঙ্কের মাধ্যমে ডিস্ক স্থান সাশ্রয়ে জয়ী হয়। ম্যানেজার নির্বাচন দলের পছন্দ এবং অবকাঠামোর উপর নির্ভর করে।
সচরাচর জিজ্ঞাসা
npm install package-lock.json আপডেট করে এবং সিম্যান্টিক রেঞ্জের মধ্যে নতুন মাইনর সংস্করণ ইনস্টল করতে পারে। npm ci (Clean Install) node_modules মুছে ফেলে এবং package-lock.json থেকে কঠোরভাবে প্যাকেজ ইনস্টল করে তা আপডেট না করেই। npm ci দ্রুততর, CI/CD-তে ব্যবহৃত হয় এবং সব মেশিনে অভিন্ন পরিবেশ নিশ্চিত করে। package-lock.json অনুপস্থিত থাকলে, npm ci ত্রুটি দেয়।
npm 7 থেকে, পিয়ার নির্ভরশীলতা দ্বন্দ্ব বিল্ড ত্রুটি সৃষ্টি করে। সমাধান: npm update-এর মাধ্যমে সব প্যাকেজ সামঞ্জস্যপূর্ণ সংস্করণে আপডেট করুন, npm 6 মোডের জন্য --legacy-peer-deps ফ্ল্যাগ ব্যবহার করুন, অথবা একটি নির্দিষ্ট প্যাকেজের সংস্করণ বাধ্য করতে package.json-এ overrides বিভাগ যোগ করুন। সর্বোত্তম বিকল্প হল নির্ভরশীলতাগুলি সামঞ্জস্যপূর্ণ সংস্করণে আপডেট করা।
npm audit npm Security Advisory ডাটাবেস থেকে পরিচিত দুর্বলতার জন্য নির্ভরশীলতা ট্রি স্ক্যান করে। কমান্ডটি গুরুত্ব স্তর (ক্রিটিক্যাল, হাই, মডারেট, লো) সহ একটি রিপোর্ট আউটপুট করে এবং দুর্বল প্যাকেজগুলি নিরাপদ সংস্করণে স্বয়ংক্রিয়ভাবে আপডেট করতে npm audit fix সুপারিশ করে। নিয়মিত npm audit চালানো JavaScript প্রকল্পের জন্য একটি মৌলিক নিরাপত্তা অনুশীলন।
npm workspaces একটি একক রিপোজিটরিতে একাধিক প্যাকেজ পরিচালনার অনুমতি দেয়। রুট package.json-এ "workspaces": ["packages/*"] ফিল্ড যোগ করুন। সুবিধা: শেয়ার্ড node_modules-এ সব নির্ভরশীলতার একক ইনস্টলেশন, স্থানীয় প্যাকেজের মধ্যে স্বয়ংক্রিয় সিমলিঙ্ক, রুট থেকে সব প্যাকেজের জন্য স্ক্রিপ্ট চালানো, এবং সংস্করণ নকল দূর করা।
package-lock.json সব নির্ভরশীলতা এবং তাদের ট্রানজিটিভ প্যাকেজের নির্ভুল সংস্করণ লক করে। এটি ছাড়া, বিভিন্ন ডেভেলপার এবং CI সার্ভার সিম্যান্টিক রেঞ্জের মধ্যে লাইব্রেরির বিভিন্ন সংস্করণ পেতে পারে, যা «আমার মেশিনে কাজ করে» ত্রুটির দিকে নিয়ে যায়। লক ফাইল কমিট করা পুনরুৎপাদনযোগ্য বিল্ড এবং সব পরিবেশে অভিন্ন আচরণ নিশ্চিত করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন