নোড প্যাকেজ ম্যনেজার (NPM)

“boy in front of computer monitor” by Arif Riyanto on Unsplash

package:

package কি সেটা জানার আগে আমাদের জানা প্রয়োজন মডিউল সম্পর্কে। মডিউল হলো একটি সিঙ্গেল জাভাস্ক্রিপ্ট ফাইল যার কিছু ফাংশনালিটি আছে। package হলো একটি ডিরেক্টরি যার মধ্যে এক বা একাধিক মডিউল থাকে, এবং একটি package.json ফাইল ও থাকে, যেখানে package এর মেটাডাটা থাকে। একটি package অনেক সাধারণ হতে পারে আবার কমপ্লেক্স ও হতে পারে। যেমন underscore package টা তে শুধু একটি জাভাস্ক্রিপ্ট ফাইল আছে, আবার express underscore package এর রুট এ একটি জাভাস্ক্রিপ্ট ফাইল থাকলেও এর সাব ডিরেক্টরি তে আরও অনেক জাভাস্ক্রিপ্ট ফাইল থাকে।

npm:

npm হলো পৃথিবীর সবচেয়ে বড় সফটওয়ার রেজিস্ট্রি। যেখানে প্রায় 600,000 প্যাকেজ রয়েছে। সারা পৃথিবীর ওপেন সোর্স ডেভেলাপার রা npm ব্যবহার করে থাকে প্যাকেজ শেয়ার/ব্যবহার করার জন্য। npm এর তিনটি component থাকে।

  • Website: এই website ব্যবহার করে আপনি প্যকেজ গুলো দেখতে এবং ইন্সটল করার দিক নির্দেশনা পাবেন।
  • Command Line Interface (CLI): CLI বা কমান্ড লাইন ইন্টারফেস ব্যবহার করে ডেভেলপার রা npm এর সাথে যোগাযোগ করে থাকে।
  • Registry: registry হলো জাভাস্ক্রিপ্ট সফটওয়ার এর এক বিশাল ডাটাবেস।

npm এর ব্যবহারঃ

npm মূলত একটি কমান্ড লাইন টুল এবং থার্ড পার্টি লাইব্রেরি গুলোর একটি রেজিস্ট্রি ।

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

একটা কথা বলে রাখা ভাল, যখন আমরা আমাদের মেশিন এ নোড ইনস্টল করি তখন সাথে সাথে npm ও ইনস্টল হয়ে যায়। নিচের কমান্ড টি দিয়ে আপনারা npm ভার্শন চেক করতে পারবেন।

package.json:

আমরা এখন একটি নতুন ফোল্ডার তৈরি করব এবং সেই ফোল্ডার টা তে যাব নিচের ২ টি কমান্ডের মাধ্যমে

আপনারা যদি কেউ z shell ব্যবহার করে থাকেন, তাহলে উপরের কাজটুকু এক টা কমান্ড এই করে ফেলতে পারবেন , সেটা হল take node-test ( এটা node-test নামে একটা ফোল্ডার তৈরি করবে এবং আপনাকে সেই ফোল্ডার এ নিয়ে যাবে।

আমাদের এপ্লিকেশন এ কোনো নোড প্যাকেজ যোগ করার আগে আমাদের একটি package.json ফাইল তৈরি করতে হবে। package.json মূলত একটি json ফাইল যেটা তে আমাদের এপ্লিকেশন সম্পর্কে কিছু প্রাথমিক তথ্য থাকে।

package.json ফাইল তৈরি করার পদ্ধতিঃ

প্রথমেই আমাদের npm init কমান্ড টি দিতে হবে

এটা আপনাকে অনেক গুলো প্রশ্ন করবে ধাপে ধাপে ফাইল টা সেট আপ করার জন্য। মজার ব্যাপার হল আমরা কিন্তু মাত্র একটা কমান্ড দিয়েই ডিফল্ট মান দিয়ে package.json তৈরি করে ফেলতে পারি। সেটা হল npm init — yes

এখন আমাদের package.json ফাইল তৈরি!

node-package ইনস্টল করার পদ্ধতিঃ

এখানে ক্লিক করে মজার একটি নোড প্যাকেজ ইনস্টল করে ফেলব। এটা করার জন্য আমাদের একটি কমান্ড দিতে হবে। সেটা হল: npm i cat-me

এটা করার পরে package.json এ dependencies নামে একটি প্রোপার্টি যোগ হবে ঠিক নিচের ছবির মতঃ

সুতরাং যখন আমরা npm i cat-me কমান্ড টা দেই npm সেই প্যাকেজ টার লেটেস্ট ভার্শন ডাউনলোড করে এবং সেটা node-modules folder এ স্টোর করে। আমাদের নোড এপ্লিকেশন এর মত প্রতিটা node-modules folder এ ও একটি package.json থাকে।

npm এর আগের ভার্শন গুলোতে কোনো প্যাকেজ ইনস্টল এ জন্য npm i cat-me — save এই কমান্ড টা দিতে হত। তা না হলে আমাদের এপ্লিকেশন এর package.json ফাইল এ ওই প্যাকেজ (cat-me) টা যোগ হত না। কিন্তু npm এর নতুন ভার্শন গুলোতে — save flag দেয়ার প্রয়োজন পরে না।

প্যাকেজ ব্যবহার করার পদ্ধতিঃ

cat-me প্যাকেজ টা আমরা ইনস্টল করেছি, এখন এটি ব্যবহার করার সকল ইন্সট্রাকশন এখানে দেয়া আছে।

প্রথমে আমরা আমাদের প্রোজেক্ট ফোল্ডার এ index.js নামে একটা ফাইল তৈরি করব।

// cat-me প্যাকেজ টা একটা ফাংশন রিটার্ন করে সেটা catMe variable এ স্টোর করা হল
var catMe = require(‘cat-me’)
// ফাংশন টা কল করে কনসোল এ প্রিন্ট করা হল
console.log(catMe())

এবার আমরা node index.js কমান্ড দিলে কনসোল এ আউটপুট দেখতে পারব

Semantic Versioning:

‘npm i mongoose’ এই কমান্ড টা দিয়ে আমরা mongoose প্যাকেজ টা ইন্সটল করলাম। এখন package.json ফাইল এর “dependencies” এর ভিতর আমরা “^mongoose:5.2.5” এরকম কিছু একটা দেখব। এটা আসলে প্যাঁকেজ টার ভার্শন।

5.2.5 এর প্রথম 5 হলো মেজর ভার্শন , 2 হলো মাইনর ভার্শন এবং শেষের 5 হলো প্যাঁচ ভার্শন। ' ^ ' এই সাইন টা সম্পর্কে একটু পরে বলছি। এখন আমরা মেজর, মাইনর এবং প্যাঁচ ভার্শন সম্পর্কে জানব।

ধরা যাক, আগামীকাল mongoose এর ডেভেলপার রা একটি বাগ পেলেন। তারা বাগ টা ফিক্স করবেন এবং নতুন একটি ভার্শন রিলিজ করবেন। এই ভার্শন টা হবে mongoose:5.2.6। আমরা দেখতে পাচ্ছি যে প্যাঁচ ভার্শন টা ৫ থেকে ৬ হয়েছে।

কোনও প্যাকেজ এর বাগ ফিক্স করার পর, যে ভার্শন রিলিজ করা হয় সেটা তে শুধুমাত্র প্যাঁচ ভার্শন টা বাড়ানো হয়।

কোনও প্যাকেজ এ নতুন ফিচার যোগ করার জন্য যদি নতুন প্যাকেজ ভার্শন রিলিজ দিতে হয় সেক্ষেত্রে মাইনর ভার্শন টা বাড়ানো হয়। এই ভার্শন টা হবে 5.3.5 । তবে খেয়াল রাখা হয় যেন সেই পরিবর্তন টা যাতে পূর্বের ভার্শন এর এপ্লিকেশন গুলো কে ব্রেক না করে ফেলে।

যদি প্যাকেজ এ এরকম কোনো পরিবর্তন আনতে হয় যেটা পূর্বের ভার্শন এর উপর ডিপেন্ডেন্ড এরকম কোনও এপ্লিকেশন কে ব্রেক করে, সেক্ষেত্রে মেজর ভার্শন পরিবর্তন করা হয়। তখন ভার্শন টা হবে 6.0.0

^mongoose:5.2.5 এর, ^ সাইন টার মানে হলো যতক্ষণ পর্যন্ত মেজর ভার্শন 5 আছে, ততক্ষণ পর্যন্ত আমরা আপডেট নিতে আগ্রহী

ধরেন আজ থেকে এক বছর পর কেউ আপনার গিটহাব এ হোস্ট করা প্রজেক্ট ‘npm install’ কমান্ড দিয়ে ইন্সটল করল। তখন যদি মাইনর আর প্যাঁচ ভার্শন আপডেট হয় সেক্ষেত্রে ওই লোকের মেশিন এ আপডেটেড ভার্শন টাই যাবে।

কিন্তু ওই লোক যদি আপনার প্রজেক্ট এ ব্যবহারকৃত ভার্শন টাই চায় সেক্ষেত্রে আপনাকে ^ — এই সাইন টা মুছে দিতে হবে।

এখানে, npm এর বেসিক বিষয়গুলো নিয়ে আলোচনা করা হয়েছে , পরবর্তিতে, কিভাবে npm এ নিজের প্যাকেজ পাবলিশ করা যায়, কিভাবে সেটা আপডেট করা যায় এবং কিভাবে আলফা এবং বেটা ভার্শন রিলিস করা যায় সে বিষয়ে আলোচনা করব।

--

--