npm প্যাকেজ এবং nodebbs সম্পর্কে আপনার যা জানা উচিত

সর্বশেষ আপডেট: 12/30/2025
লেখক: C SourceTrail
  • npm একটি বিশাল প্যাকেজ রেজিস্ট্রি এবং Node.js নির্ভরতা ইনস্টল, আপডেট, অপসারণ এবং নিরীক্ষণের জন্য প্রাথমিক CLI টুল উভয়ই হিসেবে কাজ করে।
  • প্রকল্পগুলি প্রধান, রপ্তানি, আমদানি এবং প্রকারের মতো ক্ষেত্রের মাধ্যমে নির্ভরতা, স্ক্রিপ্ট এবং এন্ট্রি পয়েন্টগুলি সংজ্ঞায়িত করতে package.json-এর উপর নির্ভর করে।
  • স্থানীয় বনাম বিশ্বব্যাপী ইনস্টল, সেমভার রেঞ্জ এবং নির্ভরতার ধরণ (নির্ভরতা, ডেভডিপেন্ডেন্সি, ঐচ্ছিক নির্ভরতা) প্যাকেজগুলি কীভাবে এবং কোথায় ব্যবহার করা হবে তা নিয়ন্ত্রণ করে।
  • উন্নত রপ্তানি, শর্তসাপেক্ষ রপ্তানি এবং সাবপাথ আমদানি নোডবিবিএসের মতো প্যাকেজ বিভিন্ন পরিবেশে কী প্রকাশ করে তার উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে।

npm প্যাকেজ nodebbs

যদি তুমি বুঝতে চেষ্টা করছো কিভাবে একটি "nodebbs" এর মতো npm প্যাকেজ Node.js ইকোসিস্টেমের সাথে খাপ খায়, প্রথমে আপনার একটি দৃঢ় ধারণা থাকা প্রয়োজন npm কি?, প্যাকেজগুলি কীভাবে গঠন করা হয় এবং নোড কীভাবে মডিউলগুলি সমাধান করে এবং প্রকাশ করে। আধুনিক নোড.জেএস প্রকল্পগুলি কেবল কোড ইনস্টল করার জন্যই নয়, স্ক্রিপ্ট, সুরক্ষা, সংস্করণ এবং আপনার প্যাকেজটি অন্যরা কীভাবে ব্যবহার করে তা পরিচালনা করার জন্যও npm-এর উপর ব্যাপকভাবে নির্ভর করে।

এই নির্দেশিকাটি অনুসরণ করে শুরু থেকে npm — এটি কী, স্থানীয় এবং বিশ্বব্যাপী প্যাকেজগুলি কীভাবে কাজ করে, কীভাবে ইনস্টল, আপডেট এবং অপসারণ করতে হয়, কীভাবে package.json কাঠামোগত, এবং কীভাবে উন্নত বৈশিষ্ট্যগুলি যেমন exports এবং imports ক্ষেত্রগুলি আপনার প্যাকেজ (যেমন, nodebbs এর মতো একটি ফোরাম ইঞ্জিন) গ্রাহকদের জন্য কী উপলব্ধ করে তা নিয়ন্ত্রণ করে। সবকিছুই সরল ইংরেজিতে ব্যাখ্যা করা হয়েছে এবং প্রচুর উদাহরণ দেওয়া হয়েছে যাতে আপনি আত্মবিশ্বাসের সাথে npm প্যাকেজ প্রকাশ এবং ব্যবহার করতে পারেন।

npm কী এবং কেন এটি nodebbs এর মতো প্যাকেজের জন্য গুরুত্বপূর্ণ

npm (নোড প্যাকেজ ম্যানেজার) এটি একটি কমান্ড-লাইন টুল এবং ওপেন সোর্স Node.js প্যাকেজের একটি বিশাল অনলাইন রেজিস্ট্রি উভয়ই। যখন আপনি আপনার সিস্টেমে Node.js ইনস্টল করেন, তখন npm স্বয়ংক্রিয়ভাবে ইনস্টল হয়ে যায়, যা আপনাকে সম্প্রদায় দ্বারা প্রকাশিত লক্ষ লক্ষ পুনঃব্যবহারযোগ্য মডিউলগুলিতে তাৎক্ষণিক অ্যাক্সেস দেয়। npmjs.com.

সার্জারির npm রেজিস্ট্রি এটি কার্যকরভাবে বিশ্বের বৃহত্তম একক-ভাষা কোড সংগ্রহস্থল, যেখানে দশ লক্ষেরও বেশি প্রকাশিত প্যাকেজ রয়েছে যা প্রায় প্রতিটি কল্পনাযোগ্য কাজকে কভার করে। এই প্যাকেজগুলির মধ্যে রয়েছে ক্ষুদ্র ইউটিলিটি (একক ফাংশন) থেকে শুরু করে সম্পূর্ণ ফ্রেমওয়ার্ক, CLI এবং অ্যাপ্লিকেশন স্কেলেটন যা প্রতিদিন অ্যাপ উৎপাদনে শক্তি যোগায়।

মূলত, npm ডিজাইন করা হয়েছিল শুধুমাত্র ব্যাকএন্ড Node.js প্রকল্পের জন্য নির্ভরতা পরিচালনা করার জন্য, কিন্তু আজ এটি ফ্রন্টএন্ড ওয়ার্কফ্লোগুলির জন্য একটি মূল হাতিয়ার। আপনি React, Webpack বা Vite এর মতো টুলিং, CSS ফ্রেমওয়ার্ক, টেস্ট রানার এবং আরও অনেক কিছু ইনস্টল করতে পারেন — সবকিছুই npm প্যাকেজ হিসাবে বিতরণ করা হয়।

নির্দিষ্ট প্যাকেজের সাথে কাজ করার সময় যেমন nodebbs, npm এর কোড ডাউনলোড করার জন্য দায়ী, এর নির্ভরতা সমাধান করা, আপনার টিম জুড়ে সংস্করণগুলিকে সামঞ্জস্যপূর্ণ রাখা এবং এটি প্রকাশিত যেকোনো স্ক্রিপ্ট বা CLI-কে সংযুক্ত করা। এই কারণেই যদি আপনি নিজে একটি প্যাকেজ মূল্যায়ন, কাস্টমাইজ বা প্রকাশ করতে চান তবে npm বোঝা অপরিহার্য — দেখুন ব্যাপক এনপিএম সরবরাহ শৃঙ্খলে আক্রমণ.

Node.js, npm এবং কীভাবে এগুলি ইনস্টল করবেন

যেকোনো npm প্যাকেজ ব্যবহার করতে — nodebbs সহ — আপনার প্রয়োজন Node.js এবং npm ইনস্টল করা হয়েছে আপনার মেশিনে। npm নোডের সাথে যুক্ত, তাই আপনি অফিসিয়াল সাইট থেকে নোড ইনস্টল করুন এবং আপনি যেতে প্রস্তুত।

প্রস্তাবিত পদ্ধতি হল Node.js ইনস্টল করার জন্য একটি সংস্করণ ব্যবস্থাপকের মতো nvm, যা আপনাকে একাধিক নোড এবং npm সংস্করণের মধ্যে স্যুইচ করতে দেয়। এটি বিভিন্ন নোড সংস্করণের সাথে আপনার প্রকল্পটি পরীক্ষা করা সহজ করে তোলে এবং সিস্টেম-ব্যাপী ইনস্টলারগুলির সাথে দেখা দিতে পারে এমন অনুমতি সংক্রান্ত সমস্যাগুলি এড়ায়।

আপনি দ্রুত যাচাই করতে পারবেন কিনা নোড এবং এনপিএম ইতিমধ্যেই উপস্থিত রয়েছে একটি টার্মিনাল খুলে চালানোর মাধ্যমে: node -v নোড সংস্করণ পরীক্ষা করতে এবং npm -v npm সংস্করণ নিশ্চিত করতে।

যদি Node.js অনুপস্থিত থাকে অথবা আপনার সংস্করণটি খুব পুরানো হয়, তাহলে ডাউনলোড করুন দীর্ঘমেয়াদী সহায়তা (LTS) প্রকাশ থেকে nodejs.org আপনার অপারেটিং সিস্টেমের জন্য। উইন্ডোজ এবং ম্যাকোসে, ইনস্টলার সবকিছু সেট আপ করে; লিনাক্সে আপনি নোডসোর্স বা আপনার ডিস্ট্রিবিউশনের পছন্দের পদ্ধতি ব্যবহার করতে পারেন, অথবা আবার একটি সংস্করণ পরিচালক যেমন nvm.

মূল npm ধারণা: প্যাকেজ, মডিউল এবং রেজিস্ট্রি

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

A "মডিউল" কোডের একটি ইউনিট যা আপনি Node.js ব্যবহার করে আমদানি করতে পারেন require() or import, এবং একটি npm প্যাকেজ সাধারণত গ্রাহকদের ব্যবহারের জন্য এক বা একাধিক মডিউল প্রকাশ করে। উদাহরণস্বরূপ, একটি ইউটিলিটি লাইব্রেরি একটি একক প্রধান মডিউল রপ্তানি করতে পারে, যেখানে nodebbs এর মতো একটি জটিল প্যাকেজ তার সার্ভার এবং ক্লায়েন্ট অংশগুলির জন্য একাধিক এন্ট্রি পয়েন্ট প্রকাশ করতে পারে।

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

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

কমান্ড লাইনে npm নিয়ে কাজ করা

সার্জারির npm কমান্ড-লাইন ইন্টারফেস (CLI) হল আপনি কীভাবে প্যাকেজ ইনস্টল, অপসারণ, আপডেট এবং পরিদর্শন করেন, সেইসাথে কীভাবে আপনি প্রকল্প স্ক্রিপ্ট চালান। উইন্ডোজে আপনি সাধারণত কমান্ড প্রম্পট বা পাওয়ারশেল খুলবেন; ম্যাকওএস এবং লিনাক্সে, আপনি টার্মিনাল ব্যবহার করবেন।

সর্বাধিক ব্যবহৃত কিছু npm কমান্ড হল npm install, npm uninstall, npm update, npm init, npm start, npm test, এবং npm publish। একসাথে, এই কমান্ডগুলি Node.js প্রকল্পের নির্ভরতা এবং জীবনচক্রের কাজগুলি পরিচালনা করার জন্য আপনার প্রয়োজনীয় প্রায় সবকিছুই কভার করে।

আপনার প্রকল্পে স্থানীয়ভাবে একটি নতুন প্যাকেজ ইনস্টল করতে, আপনি সাধারণত চালান npm install <package-name> প্রজেক্ট রুট থেকে। এটি প্যাকেজটি ডাউনলোড করে node_modules এবং, আধুনিক npm এর সাথে, স্বয়ংক্রিয়ভাবে এর অধীনে একটি এন্ট্রি যোগ করে dependencies in package.json.

বিশ্বব্যাপী ইনস্টলেশন, ব্যবহার করে npm install -g <package-name>, আপনার সিস্টেমের সর্বত্র উপলব্ধ থাকা সরঞ্জামগুলির জন্য সংরক্ষিত — যেমন nodemon, typescript, অথবা অন্যান্য CLI। আপনার অ্যাপ-স্তরের লাইব্রেরি (নোডেব সহ) প্রায় সবসময় স্থানীয় dependencies পরিবর্তে.

একটি নোড প্রকল্প শুরু করা এবং package.json এর ভূমিকা

প্রতিটি গুরুতর Node.js প্রকল্প একটি দিয়ে শুরু হয় package.json ফাইল, যা আপনার অ্যাপ বা লাইব্রেরির জন্য ম্যানিফেস্ট হিসেবে কাজ করে। এটি মেটাডেটা (নাম, সংস্করণ, বিবরণ), স্ক্রিপ্ট, নির্ভরতা এবং প্যাকেজটি কীভাবে লোড করা উচিত সে সম্পর্কে তথ্য সংরক্ষণ করে।

আপনি এই ফাইলটি চালিয়ে তৈরি করুন npm init একটি খালি ফোল্ডারে, তারপর প্রকল্প সম্পর্কে কয়েকটি প্রম্পটের উত্তর দিন। যদি আপনি প্রশ্নগুলি এড়িয়ে যেতে চান, npm init -y একটি ন্যূনতম উৎপন্ন করে package.json বুদ্ধিমান ডিফল্ট সহ যা আপনি পরে সম্পাদনা করতে পারবেন।

একদা package.json বিদ্যমান, আপনার ইনস্টল করা প্রতিটি প্যাকেজ যেকোনো একটির অধীনে রেকর্ড করা হয় dependencies, devDependencies, অথবা অন্যান্য ডেডিকেটেড বিভাগ। এটিই অন্য ডেভেলপারকে আপনার রেপো ক্লোন করতে এবং সহজভাবে চালাতে দেয় npm install সম্পূর্ণ নির্ভরতা ট্রি পুনরুদ্ধার করতে।

nodebbs এর মতো একটি প্যাকেজের জন্য যা আপনি প্রকাশ করতে চাইতে পারেন, package.json প্যাকেজের নাম, এন্ট্রি পয়েন্ট এবং যেকোনো ক্ষেত্রও ঘোষণা করে main, exports, বা type যা নোড কীভাবে তার মডিউলগুলি সমাধান করে তা নিয়ন্ত্রণ করে। এটি করে package.json এনপিএম প্যাকেজ গ্রহণ এবং উৎপাদন উভয়ের ক্ষেত্রেই কেন্দ্রীয়।

npm প্যাকেজের স্থানীয় বনাম বিশ্বব্যাপী ইনস্টলেশন

স্থানীয় প্যাকেজগুলি বর্তমান প্রকল্পের মধ্যে ইনস্টল করা আছে node_modules ডিরেক্টরি এবং শুধুমাত্র সেই প্রকল্পের মধ্যেই উপলব্ধ। যখন আপনি চালান npm install express or npm install nodebbs আপনার প্রোজেক্ট ফোল্ডারে, প্যাকেজটি সেই অ্যাপের নির্ভরতা গ্রাফের অংশ হয়ে যায়।

এই স্থানীয় ইনস্টলেশন কৌশলটি বাধা দেয় প্রকল্পগুলির মধ্যে সংস্করণ দ্বন্দ্ব কারণ প্রতিটি প্রকল্প নির্ভরতার নিজস্ব কপি বজায় রাখে। একটি অ্যাপ এক্সপ্রেস 4 ব্যবহার করতে পারে এবং অন্যটি এক্সপ্রেস 5 ব্যবহার করতে পারে এবং তারা একে অপরের সাথে হস্তক্ষেপ করবে না।

গ্লোবাল প্যাকেজ, এর সাথে ইনস্টল করা হয়েছে npm install -g, একটি সিস্টেম-ব্যাপী অবস্থানে স্থাপন করা হয় এবং সাধারণত কমান্ড-লাইন সরঞ্জামগুলি প্রকাশ করে। আপনি এটি ব্যবহার করতে পারেন nodemon, typescript, অথবা গ্লোবাল প্রজেক্ট জেনারেটরের জন্য, কিন্তু আপনি খুব কমই চান যে nodebbs এর মতো অ্যাপ্লিকেশন কোড গ্লোবাল হোক।

npm আপনাকে গ্লোবাল ইনস্টলেশন প্রিফিক্স পরিবর্তন করতে দেয় npm config set prefix <path>, যা আপনার যদি অ্যাডমিন অধিকার না থাকে অথবা গ্লোবাল CLI ইনস্টল করার সময় অনুমতি ত্রুটি এড়াতে চান তাহলে কাজে লাগবে। এইভাবে, আপনার গ্লোবাল টুলগুলি একটি ব্যবহারকারী-লিখনযোগ্য ডিরেক্টরিতে থাকে।

নির্ভরতা পরিচালনা: ইনস্টল, আপডেট এবং অপসারণ

দৈনন্দিন কাজে, আপনি অনেক সময় ব্যয় করবেন npm নির্ভরতা যোগ করা, আপডেট করা এবং মাঝে মাঝে অপসারণ করা. npm স্থানীয় এবং বিশ্বব্যাপী উভয় ক্ষেত্রেই এই প্রতিটি ক্রিয়াকলাপের জন্য সহজ কমান্ড প্রদান করে।

একটি বিদ্যমান প্রকল্পে সমস্ত নির্ভরতা ইনস্টল করা চালানোর মতোই সহজ npm install ডিরেক্টরি যেখানে package.json npm নির্ভরতা এবং devDependencies এর তালিকা পড়ে এবং পুনরায় তৈরি করে node_modules সেই অনুযায়ী ফোল্ডার।

একটি একক নির্ভরতা যোগ করতে, আপনি চালান npm install <package-name> (অথবা npm i <package-name> সংক্ষেপে), ঐচ্ছিকভাবে পতাকা সহ --save-dev, --save-optional, বা --no-saveএই পতাকাগুলি নিয়ন্ত্রণ করে যে প্যাকেজটি নিয়মিত নির্ভরতা হিসেবে রেকর্ড করা হবে, শুধুমাত্র উন্নয়ন নির্ভরতা হিসেবে রেকর্ড করা হবে, নাকি আদৌ রেকর্ড করা হবে না।

নির্ভরতা আপডেট করা প্রকল্পব্যাপী করা যেতে পারে npm update, যা প্যাকেজগুলিকে নতুন সংস্করণে আপগ্রেড করে যা এখনও সংস্করণের রেঞ্জগুলিকে পূরণ করে package.json. আপনি একটি একক প্যাকেজও লক্ষ্য করতে পারেন npm update <package-name>, অথবা যোগ করুন -g যদি আপনি একটি বিশ্বব্যাপী টুল আপডেট করছেন।

একটি প্যাকেজ আনইনস্টল করা প্রতিসম: npm uninstall <package-name> থেকে এটি সরিয়ে দেয় node_modules এবং পরিষ্কার করে package.json এন্ট্রি। ব্যবহার npm uninstall -g বিশ্বব্যাপী ইনস্টল করা প্যাকেজগুলির জন্যও একই কাজ করে।

নির্ভরতা, ডেভডিপেন্ডেন্সি এবং ঐচ্ছিক নির্ভরতা বোঝা

In package.json, npm বিভিন্ন ধরণের নির্ভরতার মধ্যে পার্থক্য করে কখন এবং কীভাবে তাদের প্রয়োজন তার উপর নির্ভর করে। এই বিচ্ছেদটি সঠিকভাবে করা আপনার উৎপাদন বান্ডেলকে ঝুঁকে রাখে এবং আপনার টুলিংকে নমনীয় রাখে।

dependencies আপনার অ্যাপ্লিকেশনটি উৎপাদনে চালানোর জন্য প্রয়োজনীয় প্যাকেজগুলির তালিকা তৈরি করে। একটি ওয়েব অ্যাপের জন্য, এতে এক্সপ্রেস, মঙ্গুজ, এমনকি নোডেববসও অন্তর্ভুক্ত থাকতে পারে যদি আপনি এটি আপনার সার্ভার স্ট্যাকের অংশ হিসাবে এম্বেড করেন।

devDependencies Jest, ESLint, Webpack, Babel, অথবা Nodemon এর মতো প্যাকেজগুলি শুধুমাত্র ডেভেলপমেন্ট বা বিল্ডের সময় প্রয়োজন হয়। এগুলি চালানোর সময় ইনস্টল করা হয় না। npm install --production, যা আপনার উৎপাদন পরিবেশকে হালকা রাখে।

optionalDependencies এতে এমন প্যাকেজ রয়েছে যা আপনার অ্যাপকে উন্নত করে কিন্তু কঠোরভাবে বাধ্যতামূলক নয়। যদি কোনও ঐচ্ছিক নির্ভরতা ইনস্টল করতে ব্যর্থ হয়, তাহলে npm এটিকে মারাত্মক ত্রুটি হিসেবে বিবেচনা করবে না; আপনার কোডটি এর অনুপস্থিতি সুন্দরভাবে পরিচালনা করবে বলে আশা করা হচ্ছে।

পতাকা যেমন --save-prod (ডিফল্ট), --save-dev (অথবা -D), এবং --save-optional নতুন ইনস্টল করা প্যাকেজ কোথায় রেকর্ড করা হবে তা নিয়ন্ত্রণ করুন। ঐতিহাসিকভাবে একটি স্পষ্ট ছিল --save পতাকা, কিন্তু আধুনিক npm ট্রিটস npm install <name> ডিফল্টরূপে একটি সেভ-টু-ডিপেন্ডেন্সি অপারেশন হিসেবে।

নির্দিষ্ট প্যাকেজ সংস্করণ সেভার এবং ইনস্টল করা

npm ব্যবহার করে শব্দার্থিক সংস্করণ (সেমভার) প্যাকেজের সংস্করণ পরিচালনা করার জন্য, যা জটিল লাইব্রেরির উপর নির্ভর করার সময় বা nodebbs এর মতো প্যাকেজের উপর নির্ভর করার সময় অত্যন্ত গুরুত্বপূর্ণ, যা সময়ের সাথে সাথে বিকশিত হতে পারে। Semver প্যাটার্ন ব্যবহার করে MAJOR.MINOR.PATCH (উদাহরণ স্বরূপ, 1.4.3).

সেমভারে, প্রধান নম্বর যখন ব্রেকিং পরিবর্তন হয় তখন বৃদ্ধি, গৌণ পশ্চাদমুখী-সামঞ্জস্যপূর্ণ বৈশিষ্ট্য সংযোজনের জন্য, এবং তালি বিদ্যমান কোড ভাঙা উচিত নয় এমন বাগ সংশোধনের জন্য। এই মডেলটি ডাউনস্ট্রিম অ্যাপগুলিকে ক্রমাগত ভেঙে না ফেলে প্যাকেজগুলিকে বিকশিত করতে দেয়।

আপনি একটি প্যাকেজের সঠিক সংস্করণ ইনস্টল করতে পারেন npm install package@version, উদাহরণ স্বরূপ npm install express@4.17.1। নতুন রিলিজগুলি আলাদাভাবে পরীক্ষা করার সময় আপনার প্রকল্পটিকে একটি পরিচিত-ভালো সংস্করণে লক করতে চাইলে এটি কার্যকর।

মধ্যে package.json, আপনি অক্ষর ব্যবহার করে নমনীয় পরিসর নির্দিষ্ট করতে পারেন যেমন ^ এবং ~ বা ব্যবহার করুন "latest" or * সর্বদা নতুন সামঞ্জস্যপূর্ণ রিলিজ পেতে। উদাহরণস্বরূপ, "express": "^4.1.1" npm-কে 4.1.1 এর উপরে যেকোনো সামঞ্জস্যপূর্ণ 4.x সংস্করণ ব্যবহার করতে বলে, কিন্তু 5.x নয়।

গ্লোবাল প্যাকেজ এবং CLI টুল

গ্লোবাল npm প্যাকেজগুলি প্রাথমিকভাবে ইনস্টল করার জন্য ব্যবহৃত হয় কমান্ড-লাইন টুলস আপনি যে প্রকল্পেই কাজ করুন না কেন, আপনি যেটি পেতে চান। এই সরঞ্জামগুলি আপনার PATH-তে এক্সিকিউটেবলগুলি নিবন্ধন করে যাতে আপনি সরাসরি টার্মিনাল থেকে সেগুলি আহ্বান করতে পারেন।

দরকারী বিশ্বব্যাপী প্যাকেজের উদাহরণগুলির মধ্যে রয়েছে nodemon ডেভেলপমেন্টের সময় নোড সার্ভার স্বয়ংক্রিয়ভাবে পুনরায় চালু করার জন্য এবং typescript আপনার মেশিনের যেকোনো জায়গা থেকে টাইপস্ক্রিপ্ট কম্পাইল করার জন্য। ইনস্টলেশন সম্পন্ন হয় npm install -g <package-name>.

আপনি কোন গ্লোবাল প্যাকেজ ইনস্টল করা আছে তা চালানোর মাধ্যমে পরীক্ষা করতে পারেন npm list -g --depth=0, যা বিশ্বব্যাপী উপলব্ধ মডিউল এবং তাদের সংস্করণগুলির একটি সমতল তালিকা প্রিন্ট করে। এটি আপনার সেটআপ অডিট বা CLI সমস্যাগুলি ডিবাগ করার জন্য সহায়ক।

গ্লোবাল টুল আপডেট করা বা অপসারণ করা স্থানীয় টুলের মতোই কাজ করে: ব্যবহার করুন npm update -g <package-name> আপডেট করতে এবং npm uninstall -g <package-name> এগুলো অপসারণ করতে। গ্লোবাল টুলগুলিকে আপডেট রাখলে আপনি সর্বশেষ সংশোধন এবং নিরাপত্তা প্যাচ পাবেন।

ইনস্টল করা প্যাকেজগুলির তালিকা তৈরি, পরিদর্শন এবং নিরীক্ষণ

আপনার প্রকল্পটি যত বড় হচ্ছে, কোন প্যাকেজগুলি ইনস্টল করা আছে এবং কোন সংস্করণগুলি ব্যবহার করা হচ্ছে তা ট্র্যাক করা ক্রমশ গুরুত্বপূর্ণ হয়ে উঠছে। npm কমান্ড প্রদান করে তালিকাভুক্ত করুন এবং পরিদর্শন করুন তোমার নির্ভরতা গাছ।

npm list বর্তমান প্রকল্পে স্থানীয়ভাবে ইনস্টল করা প্যাকেজগুলির শ্রেণিবিন্যাস দেখায়, যার মধ্যে আপনার সরাসরি নির্ভরতা নির্ভর করে এমন নেস্টেড নির্ভরতাও অন্তর্ভুক্ত। আপনি দেখতে পাবেন কোন সংস্করণগুলি ইনস্টল করা হয়েছে এবং সেগুলি কীভাবে সংযুক্ত রয়েছে।

npm list -g একইভাবে কাজ করে কিন্তু বিশ্বব্যাপী ইনস্টল করা প্যাকেজগুলির জন্য, এবং যোগ করার জন্য --depth=0 আউটপুটকে শুধুমাত্র শীর্ষ-স্তরের এন্ট্রিগুলিতে সীমাবদ্ধ করে। এটি আউটপুটকে পঠনযোগ্য রাখে, বিশেষ করে যখন অনেক নেস্টেড নির্ভরতা উপস্থিত থাকে।

নিরাপত্তার জন্য, npm-এ একটি অন্তর্ভুক্ত রয়েছে নিরীক্ষা বৈশিষ্ট্য: দৌড়ানো npm audit আপনার নির্ভরতা ট্রিকে একটি দুর্বলতা ডাটাবেসের বিরুদ্ধে স্ক্যান করে এবং জ্ঞাত সমস্যাগুলির একটি প্রতিবেদন আউটপুট করে — দেখুন শাই হুলুদ কৃমির ঘটনা। আপনি প্রায়শই এর অনেকগুলি স্বয়ংক্রিয়ভাবে ঠিক করতে পারেন npm audit fix, যা সম্ভব হলে নির্ভরতা সংস্করণগুলিকে নিরাপদ রিলিজের সাথে ঠেলে দেয়।

নিয়মিত অডিট এবং আপডেটগুলি তৃতীয় পক্ষের মডিউলগুলিতে লুকানো পরিচিত দুর্বলতার কাছে আপনার অ্যাপ্লিকেশনের প্রকাশের ঝুঁকি উল্লেখযোগ্যভাবে হ্রাস করে — উদাহরণস্বরূপ, দেখুন ক্ষতিকারক npm প্যাকেজ ছদ্মবেশ। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন আপনি বড় প্যাকেজের উপর নির্ভর করেন যেমন নোডবিবিএস যা নির্ভরতার একটি গভীর শৃঙ্খল তৈরি করতে পারে।

আপনার Node.js কোডে ইনস্টল করা প্যাকেজ ব্যবহার করা

একবার আপনি স্থানীয়ভাবে একটি প্যাকেজ ইনস্টল করার পরে, এটি আপনার Node.js অ্যাপ্লিকেশনে আমদানি করার জন্য প্রস্তুত এবং অন্য যেকোনো মডিউলের মতোই ব্যবহার করা যেতে পারে। নোড ঐতিহাসিকভাবে ব্যবহার করেছে কমনজেএস মডিউল মাধ্যমে require(), কিন্তু আধুনিক প্রকল্পগুলি প্রায়শই ECMAScript মডিউলের উপর নির্ভর করে import.

CommonJS এর ​​জন্য, আপনি লিখতে পারেন const express = require('express') or const nodebbs = require('nodebbs') প্যাকেজের প্রধান রপ্তানি আনতে আপনার ফাইলের শীর্ষে। সেখান থেকে, আপনি রুট, মিডলওয়্যার, অথবা ইন কনফিগার করতে এর নথিভুক্ত API ব্যবহার করেন নোডবিবিএসের কেস, ফোরামের বৈশিষ্ট্য.

ECMAScript মডিউলের জন্য (যখন আপনার package.json হয়েছে "type": "module" অথবা তুমি ব্যবহার করো .mjs ফাইল), আপনি পরিবর্তে করবেন import express from 'express'। অনেক আধুনিক প্যাকেজ এখন ESM বিল্ড প্রকাশ করে এবং নোড উভয় ফর্ম্যাট সমর্থন করে।

মনে রাখবেন যে বড় প্যাকেজগুলি প্রায়শই একাধিক এন্ট্রি পয়েন্ট প্রকাশ করে, তাই আপনি সাবমডিউলগুলি আমদানি করতে পারেন যেমন import { Router } from 'express' or import feature from 'nodebbs/feature.js', প্যাকেজ লেখক তাদের রপ্তানি কীভাবে গঠন করেছেন তার উপর নির্ভর করে। এখানেই exports প্যাকেজের ক্ষেত্র package.json গুরুত্বপূর্ণ হয়ে ওঠে।

npm স্ক্রিপ্ট: package.json ব্যবহার করে স্বয়ংক্রিয় কাজ করা

নির্ভরতা ব্যবস্থাপনার বাইরে, npm একটি সহজ টাস্ক রানার হিসেবে কাজ করে scripts বিভাগ package.json. স্ক্রিপ্টগুলি আপনাকে ডেভেলপমেন্ট বা স্থাপনার সময় চালানোর জন্য সাধারণ কমান্ডগুলির জন্য ছোট উপনাম সংজ্ঞায়িত করতে দেয়।

একটি মৌলিক উদাহরণ হল সংজ্ঞা দেওয়া "start": "node app.js" অধীনে scripts, যা আপনি তারপর ব্যবহার করে চালাবেন npm start। এটি মনে রাখা এবং ভাগ করা একটি দীর্ঘ কমান্ড লাইনের চেয়ে অনেক সহজ, এবং এটি পরিবেশ জুড়ে ধারাবাহিকভাবে কাজ করে।

আপনি পরীক্ষা চালানো, ফ্রন্টএন্ড সম্পদ তৈরি, লিন্টিং, ডেভেলপমেন্ট সার্ভার চালু করা, ডাটাবেস সিডিং, এমনকি প্যাকেজ সম্পর্কিত কাজগুলি সাজানোর জন্য স্ক্রিপ্ট সেট আপ করতে পারেন যেমন নোডবিবিএসউদাহরণস্বরূপ, ফোরাম সার্ভার শুরু করার আগে আপনার কাছে ডাটাবেস মাইগ্রেশন চালানোর জন্য একটি স্ক্রিপ্ট থাকতে পারে।

npm এর জন্য শর্টকাট সংরক্ষণ করে start, test, restart, এবং stop, কিন্তু অন্য যেকোনো কাস্টম স্ক্রিপ্ট দিয়ে চালানো হয় npm run <script-name>। হুডের নিচে, npm পরিবেশ সেট আপ করে যাতে স্থানীয়ভাবে ইনস্টল করা CLI PATH-তে থাকে, যে কারণে কমান্ডগুলি webpack or jest প্রায়শই সম্পূর্ণ পথ ছাড়াই কাজ করে।

উন্নত প্যাকেজ প্রবেশের স্থান: প্রধান, রপ্তানি এবং আমদানি

আপনার প্রকাশিত প্যাকেজগুলির জন্য — যেমন একটি কাল্পনিক নোডবিবিএস মডিউল — গ্রাহকদের কাছে কোন ফাইলগুলি দৃশ্যমান হবে তা নিয়ন্ত্রণ করা API স্থিতিশীলতা এবং সুরক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ — যেমন ঘটনা npm টাইপোস্কোয়াটিং ঝুঁকিটি চিত্রিত করুন।

পুরোনো main ক্ষেত্রটি কেবল প্রাথমিক এন্ট্রি ফাইলের দিকে নির্দেশ করে, যেমন "main": "./index.js", এবং সমস্ত নোড সংস্করণে সমর্থিত। গ্রাহকরা করছেন require('your-package') ডিফল্টরূপে সেই ফাইলটি পাবে।

নতুন exports ক্ষেত্রটি অনেক বেশি শক্তিশালী: এটি একাধিক এন্ট্রি পয়েন্ট নির্ধারণ করতে পারে, পরিবেশ বা মডিউল সিস্টেমের উপর ভিত্তি করে শর্তসাপেক্ষ রপ্তানি সমর্থন করতে পারে এবং অভ্যন্তরীণ পথগুলিতে অ্যাক্সেস ব্লক করতে পারে যার উপর আপনি ব্যবহারকারীদের নির্ভর করতে চান না। যখন exports উপস্থিত থাকলে, শুধুমাত্র স্পষ্টভাবে তালিকাভুক্ত পাথগুলি খালি আমদানির মাধ্যমে উপলব্ধ যেমন require('pkg/subpath').

An exports মানচিত্রে একটি রুট এন্ট্রি নির্দিষ্ট করা যেতে পারে ".", অতিরিক্ত উপপথ যেমন "./feature", এবং এমনকি এর স্পষ্ট প্রকাশ ./package.json যদি প্রয়োজন হয়। এটি আপনাকে বাস্তবায়নের বিশদ গোপন রেখে আপনার পাবলিক API সারফেসকে সাবধানতার সাথে আকার দিতে সাহায্য করে।

এর সাথে প্যাটার্ন রপ্তানি করুন * প্রতিটি ফাইল তালিকাভুক্ত না করেই আপনাকে সম্পূর্ণ ফোল্ডারগুলি প্রকাশ করতে দেয়; উদাহরণস্বরূপ, "./lib/*": "./lib/*.js" সমস্ত মিলে যাওয়া সাবপাথ ম্যাপ করবে। আপনি নির্দিষ্ট সাবফোল্ডারগুলিকে ম্যাপ করে স্পষ্টভাবে ব্লক করতে পারেন null, যা গ্রাহকদের সেই পথগুলি আমদানি করতে বাধা দেয়।

শর্তসাপেক্ষ রপ্তানি এবং পরিবেশ-সচেতনতামূলক নির্মাণ

শর্তসাপেক্ষ রপ্তানি আপনার প্যাকেজটি কোথায় বা কীভাবে ব্যবহার করা হচ্ছে তার উপর নির্ভর করে আপনাকে বিভিন্ন ফাইল সরবরাহ করার অনুমতি দেয়। আপনি একটি বিল্ড অপ্টিমাইজ করতে পারেন import (ESM) এবং অন্যটির জন্য require() (কমনজেএস), অথবা নোড এবং ব্রাউজারগুলির জন্য পৃথক বিল্ডও।

শর্ত যেমন "import", "require", "node", "node-addons", "module-sync", এবং "default" প্রদর্শিত হতে পারে exports সঠিক লক্ষ্য নির্বাচন করার জন্য বস্তু। উদাহরণস্বরূপ, "import": "./index-module.js" এবং "require": "./index-require.cjs" দ্বৈত ESM/CommonJS সহায়তা প্রদান করুন।

এই শর্তগুলি ক্রমানুসারে মূল্যায়ন করা হয়েছে, তাই আপনার এগুলি তালিকাভুক্ত করা উচিত সবচেয়ে নির্দিষ্ট থেকে সবচেয়ে কম নির্দিষ্ট, একটি দিয়ে শেষ হচ্ছে "default" অজানা পরিবেশের জন্য ফলব্যাক। এটি নিশ্চিত করে যে অন্যান্য রানটাইম (উদাহরণস্বরূপ, আমদানি মানচিত্র ব্যবহার করে ব্রাউজার লোডার) এখনও আপনার প্যাকেজ ব্যবহার করতে পারে।

নোড আপনাকে নেস্ট কন্ডিশনও দেয়, যেমন একটি থাকা "node" উভয়ই ধারণকারী শাখা "import" এবং "require", প্লাস একটি পৃথক "default" যা একটি সর্বজনীন বিল্ডকে লক্ষ্য করে। এই নমনীয়তা বিশেষভাবে সহায়ক যখন আপনার প্যাকেজটি নোডে নেটিভ অ্যাডঅনের উপর নির্ভর করে কিন্তু অন্য কোথাও একটি পলিফিল ব্যবহার করে — দেখুন চাপের মুখে এনপিএম নিরাপত্তা.

অন্তর্নির্মিত অবস্থার বাইরে, নোড ব্যবহারকারী-সংজ্ঞায়িত শর্তগুলিকে সমর্থন করে যা এর মাধ্যমে পাস করা হয়েছে node --conditions=<name>, এবং বৃহত্তর বাস্তুতন্ত্র যেমন কীগুলির উপর একত্রিত হয়েছে "browser", "types", "development", এবং "production" আরও বিশেষায়িত পরিস্থিতির জন্য। এগুলি বান্ডলার, টাইপ চেকার এবং রানটাইম জুড়ে আচরণ সমন্বয় করতে সাহায্য করে।

সাবপাথ আমদানি এবং অভ্যন্তরীণ মডিউল উপনাম

এ ছাড়াও exports, দ্য imports ক্ষেত্র package.json আপনাকে ব্যক্তিগত আমদানি স্পেসিফায়ার সংজ্ঞায়িত করতে দেয় যা শুধুমাত্র প্যাকেজের ভিতরেই বৈধ। এই স্পেসিফায়ারগুলি সর্বদা দিয়ে শুরু হয় # বহিরাগত প্যাকেজের সাথে সংঘর্ষ এড়াতে।

উদাহরণস্বরূপ, আপনি মানচিত্র করতে পারেন "#dep" একটি পরিবেশে একটি নোড-নেটিভ নির্ভরতা এবং অন্য পরিবেশে একটি পলিফিলের অধীনে শর্তাধীন ম্যাপিং ব্যবহার করে imports. আপনার প্যাকেজের ভিতরের কোডটি তখন import '#dep' এবং স্বয়ংক্রিয়ভাবে সঠিক বাস্তবায়ন পায়।

সাবপাথ প্যাটার্নগুলি এর মধ্যেও ব্যবহার করা যেতে পারে imports অভ্যন্তরীণ ফাইলের গ্রুপ ম্যাপ করতে, যেমন "#internal/*.js": "./src/internal/*.js"। এটি অভ্যন্তরীণ মডিউলগুলির জন্য পরিষ্কার, স্থিতিশীল আমদানি পথ তৈরি করে এবং আপনার ব্যবহারকারীদের কাছে বাস্তবায়নের বিবরণ ফাঁস না করে রিফ্যাক্টরগুলিকে পরিচালনাযোগ্য রাখে।

রেজোলিউশনের নিয়ম হল imports সেগুলোর প্রতিফলন ঘটাও exports, প্যাকেজ রুটের ভিতরে পাথ রাখার এবং বাইরে যাওয়ার অনুমতি না দেওয়ার বিধিনিষেধ সহ node_modules। এটি এনক্যাপসুলেশন বজায় রাখে এবং আশ্চর্যজনক আচরণ প্রতিরোধ করে।

স্ব-রেফারেন্সিং হল আরেকটি উন্নত বৈশিষ্ট্য, যা একটি প্যাকেজের ভিতরের কোডকে নাম অনুসারে আমদানি করতে দেয় যতক্ষণ না একটি exports মানচিত্র সংজ্ঞায়িত করা হয়েছে। উদাহরণস্বরূপ, যদি আপনার প্যাকেজের নামকরণ করা হয় "a-package" এবং রপ্তানি "." এবং "./foo.js", অভ্যন্তরীণ ফাইলগুলি লিখতে পারে import { something } from 'a-package' এবং ভোক্তারা যে প্রবেশপথটি পান সেই একই প্রবেশপথ ব্যবহার করুন।

এই কৌশলটি গভীর আপেক্ষিক পথ এড়িয়ে চলে এবং নিশ্চিত করে যে অভ্যন্তরীণ আমদানি সর্বদা দ্বারা সংজ্ঞায়িত পাবলিক API সীমানা প্রতিফলিত করে exports। এটি CommonJS এর ​​মাধ্যমেও কাজ করে require('a-package/foo.js') যখন সেই সাবপাথটি রপ্তানি করা হয়।

npm এবং নোডের মডিউল রেজোলিউশন বৈশিষ্ট্য জটিল প্যাকেজগুলি - যেমন nodebbs - কীভাবে গঠন, বিতরণ এবং ব্যবহার করা হয় তার উপর আপনাকে কঠোর নিয়ন্ত্রণ দেয়। ইনস্টলেশন মোড, নির্ভরতা ব্যবস্থাপনা, শব্দার্থিক সংস্করণ, নিরাপত্তা অডিট এবং উন্নত এন্ট্রি-পয়েন্ট কনফিগারেশন আয়ত্ত করে exports এবং imports, আপনি আত্মবিশ্বাসের সাথে অত্যাধুনিক npm প্যাকেজ তৈরি, সংহত এবং রক্ষণাবেক্ষণ করতে পারেন যা আপনার কোডবেস এবং এর চারপাশের ইকোসিস্টেম বিকশিত হওয়ার সাথে সাথে স্থিতিশীল এবং অনুমানযোগ্য থাকে।

অডিটোরিয়া ডি সিগারিডাড এনপিএম
সম্পর্কিত নিবন্ধ:
এনপিএম সিকিউরিটি অডিটিং এবং সাপ্লাই-চেইন আক্রমণের জন্য গভীর নির্দেশিকা
সম্পর্কিত পোস্ট: