paint-brush
কেন আপনার পিএনপিএম এবং সুতা লাগবে নাদ্বারা@bormando
1,498 পড়া
1,498 পড়া

কেন আপনার পিএনপিএম এবং সুতা লাগবে না

দ্বারা Dmitrii Bormotov9m2024/07/23
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

npm হল **Node.js** ইকোসিস্টেমের জন্য একটি ডিফল্ট প্যাকেজ ম্যানেজার। এটি ইনস্টলেশন প্যাকেজের সাথে আসে, তাই আপনি যখন আপনার মেশিনে **Node.js** ইনস্টল করেন (অথবা আপনি সেখানে **Node.js** সেট আপ করলে যে কোনো **CI** প্রদানকারীতে) এটি মূলত ব্যবহার করার জন্য প্রস্তুত। এটি স্থিতিশীল এবং এর গতি অন্যান্য প্যাকেজ পরিচালকদের সাথে তুলনীয়।
featured image - কেন আপনার পিএনপিএম এবং সুতা লাগবে না
Dmitrii Bormotov HackerNoon profile picture
0-item

সবাইকে অভিবাদন!


আমি নিশ্চিত যে আপনি বিভিন্ন প্যাকেজ ম্যানেজার ব্যবহার করে Node.js প্রকল্পগুলি দেখেছেন, যেমন:



আমি নিজে এটি দেখেছি এবং উপরের সমস্তটির সাথে কাজ করেছি, কিন্তু আমার মনে সবসময় একটি প্রশ্ন ছিল - কী লোক/টিমকে এনপিএম- এর পরিবর্তে সুতা বা পিএনপিএম ব্যবহার করতে চালিত করে? পেশাদার কি? কোন কনস আছে?


আচ্ছা… এর খুঁজে বের করা যাক!

কর্মক্ষমতা তুলনা নিয়ম

আমি তাদের "গতি" এর পরিপ্রেক্ষিতে npm , সুতা এবং pnpm তুলনা করার সিদ্ধান্ত নিয়েছি...


আপনি নীচে 3 টি ব্যবস্থা দেখতে পাবেন:


  1. কোনো ক্যাশে ছাড়াই একটি লক ফাইল তৈরি করুন।


  2. কোনো ক্যাশে ছাড়াই বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন।


  3. গ্লোবাল ক্যাশ সহ বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন।


ক্যাশে দুই ধরনের আছে:


  1. গ্লোবাল

    সাধারণত ব্যবহারকারীর হোম ডিরেক্টরিতে সংরক্ষণ করা হয় (fe, ~/.yarn/berry/cache )।


  2. স্থানীয়।

    প্রকল্প ডিরেক্টরিতে সংরক্ষিত (fe, <project-dir>/.yarn )।


যদিও #2 এবং #3 আমার অভিজ্ঞতায় সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে, আমি শুধু ক্ষেত্রেই #1 নিয়েছি (যদিও এটি একটি বিরল ঘটনা)।


আমি বেঞ্চমার্কের উদাহরণ হিসাবে create-react-app থেকে একটি নমুনা প্রকল্প ব্যবহার করেছি।

npm

এটি Node.js ইকোসিস্টেমের জন্য একটি ডিফল্ট প্যাকেজ ম্যানেজার - আর কি বলব? এটি ইনস্টলেশন প্যাকেজের সাথে আসে, তাই আপনি যখন আপনার মেশিনে Node.js ইনস্টল করেন (অথবা আপনি সেখানে Node.js সেট আপ করলে যেকোনো CI প্রদানকারীতে) এটি মূলত ব্যবহারের জন্য প্রস্তুত।


এটি আমার মনে একটি বিশাল "প্রো" - আপনাকে এটি আলাদাভাবে ইনস্টল করার দরকার নেই!


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


এনপিএম এর বৈশিষ্ট্যগুলি আমি এ পর্যন্ত ব্যবহার করেছি:


  1. নির্ভরতা পরিচালনা করুন (ইনস্টল করুন, অপসারণ করুন, আপডেট করুন)
  2. প্যাকেজ প্রকাশ করুন (ব্যক্তিগত, সর্বজনীন)
  3. লিঙ্ক-স্থানীয় প্যাকেজ
  4. কর্মক্ষেত্র পরিচালনা করুন।

নির্ভরতা পরিচালনা করুন

npm আপনার প্রোজেক্ট রুটের node_modules ফোল্ডারে নির্ভরতা সঞ্চয় করে। অনেকটাই অকপট।


ℹ️ package-lock.json তালিকাভুক্ত প্যাকেজগুলির জন্য রেজিস্ট্রি সম্পর্কে তথ্য সঞ্চয় করে - যদি আপনি একটি একক সুযোগ থেকে প্যাকেজ পেয়ে থাকেন, যেমন @example-company বিভিন্ন রেজিস্ট্রিতে (উদাহরণস্বরূপ - npm এবং GitHub প্যাকেজগুলি ):


package-lock.json এন্ট্রি


এখন, আসুন দেখি এটি ইনস্টলেশন গতির পরিপ্রেক্ষিতে কীভাবে কাজ করে…

কোনো ক্যাশে ছাড়া package-lock.json জেনারেট করুন

প্যাকেজ-lock.json তৈরি করুন এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করুন


লেগেছে 1 মিনিট npm- এর জন্য একটি package-lock.json তৈরি করতে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করতে।


ব্যবহৃত কমান্ড:

 npm i

কোনো ক্যাশে ছাড়া package-lock.json থেকে নির্ভরতা ইনস্টল করুন

কোনো ক্যাশে ছাড়া package-lock.json থেকে নির্ভরতা ইনস্টল করুন


লেগেছে 18 সেকেন্ড npm- এর জন্য কোনো ক্যাশে ছাড়াই package-lock.json থেকে নির্ভরতা ইনস্টল করতে।


ব্যবহৃত কমান্ড:

 npm ci

গ্লোবাল ক্যাশ সহ package-lock.json থেকে নির্ভরতা ইনস্টল করুন

গ্লোবাল ক্যাশ সহ package-lock.json থেকে নির্ভরতা ইনস্টল করুন


লেগেছে 8 সেকেন্ড npm- এর জন্য package-lock.json থেকে গ্লোবাল ক্যাশে নির্ভরতা ইনস্টল করার জন্য।


ব্যবহৃত কমান্ড:

 npm ci

কর্মক্ষেত্র পরিচালনা করুন

আমি একটি ওয়ার্কস্পেস তৈরি করতে এবং সম্পূর্ণ ওয়ার্কস্পেসের জন্য একবারে এবং নির্দিষ্ট প্রকল্পগুলির জন্য আলাদাভাবে নির্ভরতা পরিচালনা করতে সক্ষম হয়েছিলাম।


অন্য কথায় - এটি কোনও বাগ/সমস্যা ছাড়াই কাজটি সম্পন্ন করে এবং অফিসিয়াল ডকুমেন্টেশনটি বেশ সহজবোধ্য।


কর্মক্ষেত্র বৈশিষ্ট্য যা আমি এতদিন ব্যবহার করেছি:


  1. কর্মক্ষেত্রের মধ্যে সমস্ত প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন।
  2. একটি একক নির্দিষ্ট প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন।
  3. সমস্ত প্রকল্পের জন্য একবারে পুনরাবৃত্তিমূলকভাবে একটি একক স্ক্রিপ্ট চালান।

সুতা

সত্যই, আমি সুতার কিছু বৈশিষ্ট্য অনেক চেষ্টা করিনি। আমি বলতে চাচ্ছি, আমি কিছু প্রকল্পে কাজ করার সময় "নির্ভরতা ইনস্টল করার" পরিপ্রেক্ষিতে এটি অনেক ব্যবহার করেছি, এবং এটি বেশ।


সুতা একটি Node.js ইনস্টলারের সাথে আসে না, তাই আপনাকে এটি আলাদাভাবে ইনস্টল করতে হবে। এর মানে হল যে আপনার CI পাইপলাইনে একটি অতিরিক্ত পদক্ষেপ থাকবে - আপনি আপনার প্রকল্প নির্ভরতা ইনস্টল করার আগে আপনাকে সুতা সেট আপ করতে হবে।

নির্ভরতা পরিচালনা করুন

নির্ভরতা ইনস্টল করার জন্য সুতার দুটি পদ্ধতি রয়েছে:


  1. জিরো ইন্সটল ” (ডিফল্ট) - .yarn ফোল্ডার তৈরি করে এবং yarn.lock এবং .pnp.cjs ফাইলে প্যাকেজ তালিকাভুক্ত করে।


  2. একটি নিয়মিত - npm- এর মতো, নির্ভরতাকে node_modules এ সঞ্চয় করে এবং yarn.lock ফাইলে তালিকাভুক্ত করে।


ℹ️ সুতা লক ফাইলগুলি সমস্ত তালিকাভুক্ত প্যাকেজের রেজিস্ট্রি সম্পর্কে তথ্য সংরক্ষণ করে শুধুমাত্র যদি আপনি পুরানো (নিয়মিত) ইনস্টলেশন পদ্ধতি ব্যবহার করেন।


⚠️ মনে রাখবেন যে " জিরো ইন্সটল " স্থানীয় ক্যাশে প্যাকেজগুলি সংরক্ষণ করছে এবং আপনার লক ফাইলগুলির লিঙ্ক প্রদান করছে বলে মনে হচ্ছে:


প্যাকেজ লিঙ্ক

এটি আপনার জন্য গুরুত্বপূর্ণ হতে পারে যদি আপনি একটি Dockerfile বা CI পাইপলাইন পেয়ে থাকেন যেখানে আপনি একটি পরিচ্ছন্ন পরিবেশে নির্ভরতা ইনস্টল করেন এবং তারপর এটিকে অন্যটিতে সরাতে চান (আপনাকে .yarn ফোল্ডার এবং স্থানীয় ক্যাশে উভয়ই কপি করতে হবে)।


যেহেতু সুতার জন্য ডিফল্ট পদ্ধতি এখন " জিরো ইন্সটল " এবং পুরানো পদ্ধতির চেয়ে ভাল পারফরম্যান্স রয়েছে - আমরা শুধুমাত্র এই পদ্ধতির সাথে বেঞ্চমার্ক রেকর্ড করতে যাচ্ছি।

কোনো ক্যাশে ছাড়াই লক ফাইল তৈরি করুন

সুতা দিয়ে লক ফাইল তৈরি করুন এবং নির্ভরতা ইনস্টল করুন


লেগেছে 16.5 সেকেন্ড সুতা একটি yarn.lock ফাইল তৈরি করতে এবং ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করতে।


ব্যবহৃত কমান্ড:

 yarn install

কোনো ক্যাশে ছাড়াই বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন

"জিরো ইনস্টল" পদ্ধতির সাথে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করুন


লেগেছে 11 সেকেন্ড সুতা "জিরো ইন্সটল" পদ্ধতির সাথে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করার জন্য।


ব্যবহৃত কমান্ড:

 yarn install --frozen-lockfile

গ্লোবাল ক্যাশ সহ বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন


"জিরো ইন্সটল" পদ্ধতি এবং গ্লোবাল ক্যাশে সহ নির্ভরতা ইনস্টল করুন


লেগেছে 8 সেকেন্ড সুতার জন্য "জিরো ইন্সটল" পদ্ধতি এবং গ্লোবাল ক্যাশে নির্ভরতা ইনস্টল করার জন্য।


ব্যবহৃত কমান্ড:

 yarn install --frozen-lockfile

কর্মক্ষেত্র পরিচালনা করুন

আমি একটি ওয়ার্কস্পেস তৈরি করতে এবং সমস্ত প্রকল্পের জন্য এবং আলাদাভাবে নির্দিষ্ট প্রকল্পগুলির জন্য নির্ভরতা পরিচালনা করতে সক্ষম হয়েছিলাম।


কর্মক্ষেত্র বৈশিষ্ট্য যা আমি এতদিন ব্যবহার করেছি:


  1. কর্মক্ষেত্রের মধ্যে সমস্ত প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন।
  2. একটি একক নির্দিষ্ট প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন।
  3. সমস্ত প্রকল্পের জন্য একবারে পুনরাবৃত্তিমূলকভাবে একটি একক স্ক্রিপ্ট চালান।


ডকুমেন্টেশন ঠিক আছে, কিন্তু কমান্ডের নাম এবং পতাকাগুলি কিছুটা বিভ্রান্তিকর।


উদাহরণস্বরূপ, রুট ( . ) এবং নেস্টেড b2b প্রোজেক্টে test স্ক্রিপ্ট চালানোর জন্য আমাকে অবশ্যই এটি চালাতে হবে:


 yarn workspaces foreach -A --include '{.,b2b}' run test


এনপিএম এর সাথে তুলনা করে:


 npm run test --workspace=b2b --include-workspace-root

পিএনপিএম

pnpm বর্তমানে হাইপে রয়েছে - অনেক কোম্পানি এবং ওপেন সোর্স প্রকল্প এটি ব্যবহার করে


সুতার মতো - pnpm একটি Node.js ইনস্টলারের সাথে আসে না, তাই আপনাকে এটি আলাদাভাবে ইনস্টল করতে হবে। এর মানে হল যে আপনার CI পাইপলাইনে একটি অতিরিক্ত পদক্ষেপ থাকবে - আপনি আপনার প্রকল্প নির্ভরতা ইনস্টল করার আগে আপনাকে pnpm সেট আপ করতে হবে।

নির্ভরতা পরিচালনা করুন

পিএনপিএমকে " দ্রুত, ডিস্ক স্পেস দক্ষ প্যাকেজ ম্যানেজার " হিসাবে বিবেচনা করা হয় …


প্রকৃতপক্ষে, স্থানীয়ভাবে নির্ভরতা পরিচালনার ক্ষেত্রে আমি "ডিস্ক স্পেস দক্ষ" বিবৃতির সাথে একমত।


ডিফল্টরূপে, pnpm ভাগ করা নির্ভরতা ডি-ডুপ্লিকেট করে। pnpm প্যাকেজগুলির জন্য সিমলিঙ্ক তৈরি করে যেগুলি একাধিক নির্ভরতায় ব্যবহৃত হয়। অর্থাৎ, যদি প্যাকেজ a এবং b প্যাকেজ c ব্যবহার করে একটি নির্ভরতা হিসাবে - pnpm প্যাকেজ c একটি একক অনুলিপি হিসাবে সংরক্ষণ করবে এবং প্যাকেজ a এবং b এর জন্য সিমলিংক তৈরি করবে। এইভাবে, প্যাকেজ ম্যানেজার হার্ড কপি তৈরি করে না এবং আপনার SSD/HDD-এ মেমরি সংরক্ষণ করে।


ℹ️ pnpm-lock.yaml তালিকাভুক্ত প্যাকেজের রেজিস্ট্রি সম্পর্কে তথ্য সংরক্ষণ করে না।


⚠️ মনে রাখবেন যে pnpm কখনও কখনও এটিকে একটি প্রকল্প রাখার পরিবর্তে গ্লোবাল ক্যাশে নির্ভরতা সঞ্চয় করে।

কোনো ক্যাশে ছাড়াই pnpm-lock.yaml তৈরি করুন

pnpm-lock.yaml জেনারেট করুন


লেগেছে 31 সেকেন্ড pnpm- এর জন্য একটি pnpm-lock.yaml তৈরি করতে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করতে।


ব্যবহৃত কমান্ড:

 pnpm install

গ্লোবাল ক্যাশে ছাড়া pnpm-lock.yaml থেকে নির্ভরতা ইনস্টল করুন

গ্লোবাল ক্যাশে ছাড়া pnpm-lock.yaml থেকে নির্ভরতা ইনস্টল করুন


লেগেছে 16 সেকেন্ড pnpm- এর জন্য ক্যাশে ছাড়া pnpm-lock.yaml থেকে নির্ভরতা ইনস্টল করতে।


ব্যবহৃত কমান্ড:

 pnpm i --frozen-lockfile


গ্লোবাল ক্যাশ সহ বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন

ক্যাশে সহ pnpm-lock-yaml থেকে নির্ভরতা ইনস্টল করুন


লেগেছে 5 সেকেন্ড pnpm- এর জন্য গ্লোবাল ক্যাশ সহ pnpm-lock.yaml থেকে নির্ভরতা ইনস্টল করতে।


ব্যবহৃত কমান্ড:

 pnpm i --frozen-lockfile

কর্মক্ষেত্র পরিচালনা করুন

এখন, সেখানেই জিনিসগুলি সত্যিই আকর্ষণীয় হয়ে উঠেছে...


pnpm এর অনেকগুলি কনফিগারেশন বিকল্প রয়েছে, তবে কিছু মূল কার্যকারিতা কেবল কাজ করে না!


আসুন কয়েকটি বাগ পর্যালোচনা করি যা আমি সম্মুখীন করেছি:

pnpm install --filter

শুধুমাত্র নির্দিষ্ট প্রকল্পগুলির জন্য নির্ভরতা ইনস্টল করতে সক্ষম হওয়া গুরুত্বপূর্ণ -- আপনি যখন কর্মক্ষেত্রের মধ্যে নির্দিষ্ট প্রকল্পগুলির সাথে সম্পর্কিত পাইপলাইন তৈরি করেন তখন এটি মনোরেপোসের জন্য বেশ কার্যকর।


অর্থাৎ, কল্পনা করুন আপনি আপনার কর্মক্ষেত্রে পেয়েছেন:


  • একটি ওয়েব অ্যাপ,
  • ব্যাকএন্ড সার্ভার,
  • পরীক্ষা প্রকল্প (শেষ থেকে শেষ পরীক্ষা)।


এগুলি সমস্তই আলাদা npm প্রকল্প, কিন্তু এগুলি একই রেপো ☝️ এর অংশ৷


এখন, আপনি শুধুমাত্র এন্ড-টু-এন্ড পরীক্ষা চালানোর জন্য একটি পাইপলাইন চান। সুতরাং, আপনার শুধুমাত্র শেষ থেকে শেষ পরীক্ষা নির্ভরতা প্রয়োজন, তাই না?


ঠিক আছে, আপনি এটি করতে সক্ষম হবেন না - পিএনপিএম আপনাকে পুরো ওয়ার্কস্পেসের জন্য নির্ভরতা ইনস্টল করতে বাধ্য করছে!


pnpm install --filter <project-name> শুধুমাত্র নির্বাচিত প্রকল্পগুলির জন্য নির্ভরতা ইনস্টল করার কথা ছিল, কিন্তু এটি কাজ করে না।


একটি বছর পুরানো বাগ আছে এবং এটি সম্প্রতি একটি অ-কাজ করা ফিক্স দিয়ে বন্ধ করা হয়েছে।

recursive-install=false

আপনি যখন pnpm install চালান তখন pnpm সম্পূর্ণ ওয়ার্কস্পেসের (সমস্ত প্রকল্প) জন্য ডিফল্টভাবে নির্ভরতা ইনস্টল করে


আপনি যদি আপনার ওয়ার্কস্পেস রুটে .npmrcrecursive-install=false সেট করেন তাহলে আপনি এই আচরণটি বিকল্প করতে পারেন।


কিন্তু এটি আরেকটি বাগ প্রবর্তন করে যা ইতিমধ্যেই প্রায় 2 বছর পুরানো

shared-workspace-lockfile=false

ডিফল্টরূপে pnpm একটি একক লক ফাইলে ( npm এবং yarn এর মতো) নির্ভরতা তালিকা সংরক্ষণ করে।


আপনি যদি আপনার ওয়ার্কস্পেস রুটে .npmrcshared-workspace-lockfile=false সেট করেন তাহলে আপনি এই আচরণটিও বিকল্প করতে পারেন।


এটি আমাদের ওয়ার্কস্পেস বৈশিষ্ট্যটি রাখতে এবং একটি নির্দিষ্ট প্রকল্পের জন্য নির্ভরতা ইনস্টল করতে --ignore-workspace পতাকা ব্যবহার করার অনুমতি দেবে।


যাইহোক, এই সেটিংটি আরও কয়েকটি সমস্যা উপস্থাপন করে:


  1. eslint এবং tsc --noEmit আমার গিটহাব অ্যাকশন পাইপলাইনে একটি "জাভাস্ক্রিপ্ট হিপ আউট অফ মেমরি" ত্রুটি নিক্ষেপ করে।


  2. কিছু নির্ভরতা বিশ্বব্যাপী ক্যাশে সংরক্ষণ করা হয় এবং node_modules/.pnpm এ সিমলিংক করা হয়।

কর্মক্ষমতা তুলনা ফলাফল

#

npm

সুতা

পিএনপিএম

একটি লক ফাইল তৈরি করুন

60 সেকেন্ড

16.5 সেকেন্ড

31 সেকেন্ড

কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করুন

18 সেকেন্ড

11 সেকেন্ড

8 সেকেন্ড

বিশ্বব্যাপী ক্যাশে নির্ভরতা ইনস্টল করুন

8 সেকেন্ড

8 সেকেন্ড

5 সেকেন্ড


উপরের বেঞ্চমার্ক অনুসারে, npm হল সবচেয়ে ধীরগতির প্যাকেজ ম্যানেজার ☝️


যাইহোক, আসুন এই ফলাফলগুলি ব্যাখ্যা করি...

একটি লক ফাইল তৈরি করুন

এটি একটি বিরল ঘটনা। সাধারণত, একটি লক ফাইল প্রজেক্ট ইনিশিয়ালাইজেশনে তৈরি করা হয় এবং আপনি যখন প্যাকেজ ইনস্টল/আপডেট করেন তখন প্রসারিত হয়।


এটি মাথায় রেখে - আপনি যখন প্যাকেজ ম্যানেজার চয়ন করেন তখন এটির উপর নির্ভর করা খুব গুরুত্বপূর্ণ বিষয় বলে মনে হয় না।

নির্ভরতা ইনস্টল করুন

বেশিরভাগ ক্ষেত্রে, আপনার প্রকল্পগুলি নির্ভরতার একটি নির্দিষ্ট তালিকা রাখে এবং আপনি খুব কমই কিছু যোগ/সরান।


সম্ভবত, আপনি সময়ে সময়ে আপনার প্যাকেজগুলির সংস্করণগুলিকে বাম্প করবেন - এই পরিবর্তনগুলি ছোট এবং আপনি ক্যাশে থেকে বাকি প্যাকেজগুলি পুনরায় ব্যবহার করবেন৷


অন্য কথায়, সাধারণ ব্যবহারের ক্ষেত্রে হল -- প্যাকেজ রেজিস্ট্রি থেকে নতুন প্যাকেজ আনুন এবং বাকিগুলি ক্যাশে থেকে নিন।


পিএনপিএম (5-8 সেকেন্ড) মাঝখানে সুতা (8-11 সেকেন্ড) সহ npm (8-18 সেকেন্ড) থেকে প্রায় দ্বিগুণ দ্রুত।

উপসংহার

তথ্য

  • pnpm প্রকৃতপক্ষে "একটি দ্রুত এবং ডিস্ক দক্ষ" প্যাকেজ ম্যানেজার - বর্তমান পর্যালোচনায় এটি বেশ স্পষ্ট!


  • pnpm ওয়ার্কস্পেস বৈশিষ্ট্যটি বাগ করা হয়েছে এবং কিছু বাগ বছরের পর বছর ধরে অমীমাংসিত হয়েছে।


  • পিএনপিএম এবং সুতা উভয়ের জন্যই সিআই পাইপলাইনে একটি অতিরিক্ত সেটআপের প্রয়োজন হয়, যখন এনপিএম তা করে না।


  • পিএনপিএম এবং সুতা উভয়ই তাদের লক ফাইলগুলিতে প্যাকেজ রেজিস্ট্রি তথ্য সংরক্ষণ করে না, যখন এনপিএম করে।

লেখকের চিন্তাধারা

আমি মনে করি পিএনপিএম সর্বোত্তম কাজ করে যদি প্যাকেজ ম্যানেজারের জন্য আপনার প্রয়োজনীয়তা "শুধুমাত্র নির্ভরতা ইনস্টল" এর মতো সহজ হয়।


যদিও pnpm একটি Node.js ইনস্টলার আউট-অফ-এ-বক্সের সাথে আসে না, কোরপ্যাক বা বিদ্যমান অ্যাকশন সহ CI পাইপলাইনে সেট আপ করা সহজ।


আমি npm পছন্দ করি, কারণ:


  • এটি স্থিতিশীল (বিশেষ করে কর্মক্ষেত্র),


  • Node.js এর সাথে আসে এবং CI পাইপলাইনে অতিরিক্ত সেটআপের প্রয়োজন হয় না,


  • package-lock.json এ প্যাকেজ রেজিস্ট্রিগুলি সঞ্চয় করে যাতে আপনি বিভিন্ন রেজিস্ট্রি থেকে একক সুযোগের সাথে নির্ভরতা ইনস্টল করতে সক্ষম হন।


এই সুবিধাগুলি সেকেন্ডের গতি এবং ডিস্কের স্থানকে ছাড়িয়ে যায় যা আমি সুতা বা pnpm দিয়ে সংরক্ষণ করব।


প্যাকেজ ম্যানেজার নির্বাচন করার জন্য আপনার মানদণ্ড কি? লাজুক হবেন না, এবং নীচের মন্তব্য বিভাগে আপনার চিন্তা আমাকে জানান! 👇😊