npm (Node Package Manager) অন্যরা লিখে প্রকাশ করা কোড ইনস্টল করে, যাতে আপনাকে সবকিছু নিজে লিখতে না হয়। এটি Node.js-এর সাথেই বান্ডল হয়ে আসে — আপনার কাছে এটি ইতিমধ্যেই আছে।
প্রতিটি Node প্রোজেক্টের রুটে একটি package.json ফাইল থাকে — একটি সাধারণ JSON ফাইল যা প্রোজেক্ট বর্ণনা করে: এর নাম, ভার্সন, ডিপেন্ডেন্সি, আর আপনি যে স্ক্রিপ্টগুলো চালাতে পারেন। এটি তৈরি করুন:
npm init -y-y একে একে প্রশ্ন জিজ্ঞাসা করার বদলে সব ডিফল্ট গ্রহণ করে। এটি এরকম কিছু তৈরি করে:
{
"name": "my-app",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}
}npm install expressএটি তিনটি কাজ করে: নতুন একটি node_modules ফোল্ডারে express প্যাকেজ ডাউনলোড করে, package.json-এর "dependencies" তালিকায় এটি যোগ করে, আর package-lock.json-এ সঠিক ভার্সন নম্বর লেখে।
package.json একটি ডিপেন্ডেন্সিকে ঢিলেভাবে তালিকাভুক্ত করতে পারে, যেমন "যেকোনো 4.x.x ভার্সন।" package-lock.json প্রতিটি প্যাকেজের জন্য, আর সেই প্যাকেজগুলো যার উপর নির্ভর করে তার সবকিছুর জন্য, আসলে যে সঠিক ভার্সন ইনস্টল হয়েছিল তা রেকর্ড করে। এই ফাইলটি কমিট করার অর্থ একটি টিমের সবাই — আর অ্যাপটি শেষে যে সার্ভারে চলবে — ইনস্টল করার দিন যা নতুন থাকে তার বদলে একই সেট ভার্সন ইনস্টল করে।
node_modules সহজেই কয়েকশো মেগাবাইট হয়ে যেতে পারে আর এটি কখনো ভার্সন কন্ট্রোলে কমিট হয় না — যে কেউ এটি package.json আর package-lock.json থেকে একটি কমান্ড দিয়ে পুনর্নির্মাণ করতে পারে:
npm installকোনো প্যাকেজ নাম ছাড়া চালালে, npm install package.json পড়ে আর তালিকাভুক্ত সবকিছু ইনস্টল করে। এটিই সেই কমান্ড যা একজন টিমমেট প্রোজেক্ট ক্লোন করার পর চালায়, আর এই কারণেই লক ফাইল কমিট হয় কিন্তু যে ফোল্ডারটি এটি ভরে দেয় তা হয় না।
package.json-এর "scripts" অংশ শেল কমান্ডকে ছোট নাম দেয়:
{
"scripts": {
"start": "node index.js",
"dev": "node --watch index.js"
}
}npm run devnpm start আর npm test "run" শব্দটি বাদ দিতে পারে — এই দুটি বিশেষভাবে ছাড় পায়। বাকি প্রতিটি স্ক্রিপ্টের জন্য এটি লাগে: npm run <name>।