সবাইকে অভিবাদন! আমি নিশ্চিত যে আপনি বিভিন্ন প্যাকেজ ম্যানেজার ব্যবহার করে দেখেছেন, যেমন: Node.js প্রকল্পগুলি (ডিফল্ট এক) npm সুতা পিএনপিএম আমি নিজে এটি দেখেছি এবং উপরের সমস্তটির সাথে কাজ করেছি, কিন্তু আমার মনে সবসময় একটি প্রশ্ন ছিল - কী লোক/টিমকে এর পরিবর্তে বা ব্যবহার করতে চালিত করে? পেশাদার কি? কোন কনস আছে? এনপিএম- সুতা পিএনপিএম আচ্ছা… এর খুঁজে বের করা যাক! কর্মক্ষমতা তুলনা নিয়ম আমি তাদের "গতি" এর পরিপ্রেক্ষিতে , এবং তুলনা করার সিদ্ধান্ত নিয়েছি... npm সুতা pnpm আপনি নীচে 3 টি ব্যবস্থা দেখতে পাবেন: কোনো ক্যাশে ছাড়াই একটি লক ফাইল তৈরি করুন। কোনো ক্যাশে ছাড়াই বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন। গ্লোবাল ক্যাশ সহ বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন। ক্যাশে দুই ধরনের আছে: গ্লোবাল সাধারণত ব্যবহারকারীর হোম ডিরেক্টরিতে সংরক্ষণ করা হয় (fe, )। ~/.yarn/berry/cache স্থানীয়। প্রকল্প ডিরেক্টরিতে সংরক্ষিত (fe, )। <project-dir>/.yarn যদিও এবং আমার অভিজ্ঞতায় সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে, আমি শুধু ক্ষেত্রেই নিয়েছি (যদিও এটি একটি বিরল ঘটনা)। #2 #3 #1 আমি বেঞ্চমার্কের উদাহরণ হিসাবে থেকে একটি নমুনা প্রকল্প ব্যবহার করেছি। create-react-app npm এটি ইকোসিস্টেমের জন্য একটি ডিফল্ট প্যাকেজ ম্যানেজার - আর কি বলব? এটি ইনস্টলেশন প্যাকেজের সাথে আসে, তাই আপনি যখন আপনার মেশিনে ইনস্টল করেন (অথবা আপনি সেখানে সেট আপ করলে যেকোনো প্রদানকারীতে) এটি মূলত ব্যবহারের জন্য প্রস্তুত। Node.js Node.js Node.js CI এটি আমার মনে একটি বিশাল "প্রো" - আপনাকে এটি আলাদাভাবে ইনস্টল করার দরকার নেই! সেখানে অসামান্য কিছুই নেই - এটা শুধু... কাজ করে! এবং আমি বছরের পর বছর ধরে কোনও বড় বাগ দেখিনি - এটি বেশ স্থিতিশীল বলে মনে হয় এবং কাজটি সম্পন্ন করে। এর বৈশিষ্ট্যগুলি আমি এ পর্যন্ত ব্যবহার করেছি: এনপিএম নির্ভরতা পরিচালনা করুন (ইনস্টল করুন, অপসারণ করুন, আপডেট করুন) প্যাকেজ প্রকাশ করুন (ব্যক্তিগত, সর্বজনীন) লিঙ্ক-স্থানীয় প্যাকেজ কর্মক্ষেত্র পরিচালনা করুন। নির্ভরতা পরিচালনা করুন আপনার প্রোজেক্ট রুটের ফোল্ডারে নির্ভরতা সঞ্চয় করে। অনেকটাই অকপট। npm node_modules ℹ️ তালিকাভুক্ত প্যাকেজগুলির জন্য রেজিস্ট্রি সম্পর্কে তথ্য সঞ্চয় - যদি আপনি একটি একক সুযোগ থেকে প্যাকেজ পেয়ে থাকেন, যেমন বিভিন্ন রেজিস্ট্রিতে (উদাহরণস্বরূপ - এবং ): package-lock.json করে @example-company npm GitHub প্যাকেজগুলি এখন, আসুন দেখি এটি ইনস্টলেশন গতির পরিপ্রেক্ষিতে কীভাবে কাজ করে… কোনো ক্যাশে ছাড়া package-lock.json জেনারেট করুন লেগেছে এর জন্য একটি তৈরি করতে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করতে। 1 মিনিট npm- package-lock.json ব্যবহৃত কমান্ড: npm i কোনো ক্যাশে ছাড়া package-lock.json থেকে নির্ভরতা ইনস্টল করুন লেগেছে এর জন্য কোনো ক্যাশে ছাড়াই থেকে নির্ভরতা ইনস্টল করতে। 18 সেকেন্ড npm- package-lock.json ব্যবহৃত কমান্ড: npm ci গ্লোবাল ক্যাশ সহ package-lock.json থেকে নির্ভরতা ইনস্টল করুন লেগেছে এর জন্য থেকে গ্লোবাল ক্যাশে নির্ভরতা ইনস্টল করার জন্য। 8 সেকেন্ড npm- package-lock.json ব্যবহৃত কমান্ড: npm ci কর্মক্ষেত্র পরিচালনা করুন আমি তৈরি করতে এবং সম্পূর্ণ ওয়ার্কস্পেসের জন্য একবারে এবং নির্দিষ্ট প্রকল্পগুলির জন্য আলাদাভাবে নির্ভরতা পরিচালনা করতে সক্ষম হয়েছিলাম। একটি ওয়ার্কস্পেস অন্য কথায় - এটি কোনও বাগ/সমস্যা ছাড়াই কাজটি সম্পন্ন করে এবং অফিসিয়াল ডকুমেন্টেশনটি বেশ সহজবোধ্য। কর্মক্ষেত্র বৈশিষ্ট্য যা আমি এতদিন ব্যবহার করেছি: কর্মক্ষেত্রের মধ্যে সমস্ত প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন। একটি একক নির্দিষ্ট প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন। সমস্ত প্রকল্পের জন্য একবারে পুনরাবৃত্তিমূলকভাবে একটি একক স্ক্রিপ্ট চালান। সুতা সত্যই, আমি কিছু বৈশিষ্ট্য অনেক চেষ্টা করিনি। আমি বলতে চাচ্ছি, আমি কিছু প্রকল্পে কাজ করার সময় "নির্ভরতা ইনস্টল করার" পরিপ্রেক্ষিতে এটি অনেক ব্যবহার করেছি, এবং এটি বেশ। সুতার একটি ইনস্টলারের সাথে আসে না, তাই আপনাকে এটি আলাদাভাবে ইনস্টল করতে হবে। এর মানে হল যে আপনার পাইপলাইনে একটি অতিরিক্ত পদক্ষেপ থাকবে - আপনি আপনার প্রকল্প নির্ভরতা ইনস্টল করার আগে আপনাকে সেট আপ করতে হবে। সুতা Node.js CI সুতা নির্ভরতা পরিচালনা করুন নির্ভরতা ইনস্টল করার জন্য দুটি পদ্ধতি রয়েছে: সুতার “ ” (ডিফল্ট) - ফোল্ডার তৈরি করে এবং এবং ফাইলে প্যাকেজ তালিকাভুক্ত করে। জিরো ইন্সটল .yarn yarn.lock .pnp.cjs একটি নিয়মিত - এর মতো, নির্ভরতাকে এ সঞ্চয় করে এবং ফাইলে তালিকাভুক্ত করে। npm- node_modules yarn.lock ℹ️ লক ফাইলগুলি সমস্ত তালিকাভুক্ত প্যাকেজের রেজিস্ট্রি সম্পর্কে তথ্য সংরক্ষণ করে যদি আপনি পুরানো (নিয়মিত) ইনস্টলেশন পদ্ধতি ব্যবহার করেন। সুতা শুধুমাত্র ⚠️ মনে রাখবেন যে " " স্থানীয় ক্যাশে প্যাকেজগুলি সংরক্ষণ করছে এবং আপনার লক ফাইলগুলির লিঙ্ক প্রদান করছে বলে মনে হচ্ছে: জিরো ইন্সটল এটি আপনার জন্য গুরুত্বপূর্ণ হতে পারে যদি আপনি একটি বা পাইপলাইন পেয়ে থাকেন যেখানে আপনি একটি পরিচ্ছন্ন পরিবেশে নির্ভরতা ইনস্টল করেন এবং তারপর এটিকে অন্যটিতে সরাতে চান (আপনাকে ফোল্ডার এবং স্থানীয় ক্যাশে উভয়ই কপি করতে হবে)। Dockerfile CI .yarn যেহেতু সুতার জন্য ডিফল্ট পদ্ধতি এখন " " এবং পুরানো পদ্ধতির চেয়ে ভাল পারফরম্যান্স রয়েছে - আমরা শুধুমাত্র এই পদ্ধতির সাথে বেঞ্চমার্ক রেকর্ড করতে যাচ্ছি। জিরো ইন্সটল কোনো ক্যাশে ছাড়াই লক ফাইল তৈরি করুন লেগেছে একটি ফাইল তৈরি করতে এবং ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করতে। 16.5 সেকেন্ড সুতা yarn.lock ব্যবহৃত কমান্ড: yarn install কোনো ক্যাশে ছাড়াই বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন লেগেছে "জিরো ইন্সটল" পদ্ধতির সাথে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করার জন্য। 11 সেকেন্ড সুতা ব্যবহৃত কমান্ড: yarn install --frozen-lockfile গ্লোবাল ক্যাশ সহ বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন লেগেছে জন্য "জিরো ইন্সটল" পদ্ধতি এবং গ্লোবাল ক্যাশে নির্ভরতা ইনস্টল করার জন্য। 8 সেকেন্ড সুতার ব্যবহৃত কমান্ড: yarn install --frozen-lockfile কর্মক্ষেত্র পরিচালনা করুন আমি তৈরি করতে এবং সমস্ত প্রকল্পের জন্য এবং আলাদাভাবে নির্দিষ্ট প্রকল্পগুলির জন্য নির্ভরতা পরিচালনা করতে সক্ষম হয়েছিলাম। একটি ওয়ার্কস্পেস কর্মক্ষেত্র বৈশিষ্ট্য যা আমি এতদিন ব্যবহার করেছি: কর্মক্ষেত্রের মধ্যে সমস্ত প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন। একটি একক নির্দিষ্ট প্রকল্পের জন্য নির্ভরতা ইনস্টল করুন। সমস্ত প্রকল্পের জন্য একবারে পুনরাবৃত্তিমূলকভাবে একটি একক স্ক্রিপ্ট চালান। ডকুমেন্টেশন ঠিক আছে, কিন্তু কমান্ডের নাম এবং পতাকাগুলি কিছুটা বিভ্রান্তিকর। উদাহরণস্বরূপ, ( ) এবং নেস্টেড প্রোজেক্টে স্ক্রিপ্ট চালানোর জন্য আমাকে অবশ্যই এটি চালাতে হবে: রুট . b2b test yarn workspaces foreach -A --include '{.,b2b}' run test এর সাথে তুলনা করে: এনপিএম npm run test --workspace=b2b --include-workspace-root পিএনপিএম বর্তমানে হাইপে রয়েছে - । pnpm অনেক কোম্পানি এবং ওপেন সোর্স প্রকল্প এটি ব্যবহার করে মতো - একটি ইনস্টলারের সাথে আসে না, তাই আপনাকে এটি আলাদাভাবে ইনস্টল করতে হবে। এর মানে হল যে আপনার পাইপলাইনে একটি অতিরিক্ত পদক্ষেপ থাকবে - আপনি আপনার প্রকল্প নির্ভরতা ইনস্টল করার আগে আপনাকে সেট আপ করতে হবে। সুতার pnpm Node.js CI pnpm নির্ভরতা পরিচালনা করুন হিসাবে বিবেচনা করা হয় … পিএনপিএমকে " " দ্রুত, ডিস্ক স্পেস দক্ষ প্যাকেজ ম্যানেজার প্রকৃতপক্ষে, স্থানীয়ভাবে নির্ভরতা পরিচালনার ক্ষেত্রে আমি বিবৃতির সাথে একমত। "ডিস্ক স্পেস দক্ষ" ডিফল্টরূপে, ভাগ করা নির্ভরতা ডি-ডুপ্লিকেট করে। প্যাকেজগুলির জন্য সিমলিঙ্ক তৈরি করে যেগুলি একাধিক নির্ভরতায় ব্যবহৃত হয়। অর্থাৎ, যদি প্যাকেজ এবং প্যাকেজ ব্যবহার করে একটি নির্ভরতা হিসাবে - প্যাকেজ একটি একক অনুলিপি হিসাবে সংরক্ষণ করবে এবং প্যাকেজ এবং এর জন্য সিমলিংক তৈরি করবে। এইভাবে, প্যাকেজ ম্যানেজার হার্ড কপি তৈরি করে না এবং আপনার SSD/HDD-এ মেমরি সংরক্ষণ করে। pnpm pnpm a b c pnpm c a b ℹ️ তালিকাভুক্ত প্যাকেজের রেজিস্ট্রি সম্পর্কে তথ্য সংরক্ষণ করে না। pnpm-lock.yaml ⚠️ মনে রাখবেন যে কখনও কখনও এটিকে একটি প্রকল্প রাখার পরিবর্তে গ্লোবাল ক্যাশে নির্ভরতা সঞ্চয় করে। pnpm কোনো ক্যাশে ছাড়াই pnpm-lock.yaml তৈরি করুন লেগেছে এর জন্য একটি তৈরি করতে এবং কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করতে। 31 সেকেন্ড pnpm- pnpm-lock.yaml ব্যবহৃত কমান্ড: pnpm install গ্লোবাল ক্যাশে ছাড়া pnpm-lock.yaml থেকে নির্ভরতা ইনস্টল করুন লেগেছে এর জন্য ক্যাশে ছাড়া থেকে নির্ভরতা ইনস্টল করতে। 16 সেকেন্ড pnpm- pnpm-lock.yaml ব্যবহৃত কমান্ড: pnpm i --frozen-lockfile গ্লোবাল ক্যাশ সহ বিদ্যমান লক ফাইল থেকে নির্ভরতা ইনস্টল করুন লেগেছে এর জন্য গ্লোবাল ক্যাশ সহ থেকে নির্ভরতা ইনস্টল করতে। 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 আপনি যদি আপনার ওয়ার্কস্পেস রুটে এ সেট করেন তাহলে আপনি এই আচরণটি বিকল্প করতে পারেন। .npmrc recursive-install=false কিন্তু ৷ এটি আরেকটি বাগ প্রবর্তন করে যা ইতিমধ্যেই প্রায় 2 বছর পুরানো shared-workspace-lockfile=false ডিফল্টরূপে একটি একক লক ফাইলে ( এবং এর মতো) নির্ভরতা তালিকা সংরক্ষণ করে। pnpm npm yarn আপনি যদি আপনার ওয়ার্কস্পেস রুটে এ সেট করেন তাহলে আপনি এই আচরণটিও বিকল্প করতে পারেন। .npmrc shared-workspace-lockfile=false এটি আমাদের ওয়ার্কস্পেস বৈশিষ্ট্যটি রাখতে এবং একটি নির্দিষ্ট প্রকল্পের জন্য নির্ভরতা ইনস্টল করতে পতাকা ব্যবহার করার অনুমতি দেবে। --ignore-workspace যাইহোক, এই সেটিংটি আরও কয়েকটি সমস্যা উপস্থাপন করে: এবং আমার পাইপলাইনে একটি ত্রুটি নিক্ষেপ করে। eslint tsc --noEmit গিটহাব অ্যাকশন "জাভাস্ক্রিপ্ট হিপ আউট অফ মেমরি" কিছু নির্ভরতা বিশ্বব্যাপী ক্যাশে সংরক্ষণ করা হয় এবং এ সিমলিংক করা হয়। node_modules/.pnpm কর্মক্ষমতা তুলনা ফলাফল # npm সুতা পিএনপিএম একটি লক ফাইল তৈরি করুন 60 সেকেন্ড 16.5 সেকেন্ড 31 সেকেন্ড কোনো ক্যাশে ছাড়াই নির্ভরতা ইনস্টল করুন 18 সেকেন্ড 11 সেকেন্ড 8 সেকেন্ড বিশ্বব্যাপী ক্যাশে নির্ভরতা ইনস্টল করুন 8 সেকেন্ড 8 সেকেন্ড 5 সেকেন্ড উপরের বেঞ্চমার্ক অনুসারে, হল সবচেয়ে ধীরগতির প্যাকেজ ম্যানেজার ☝️ npm যাইহোক, আসুন এই ফলাফলগুলি ব্যাখ্যা করি... একটি লক ফাইল তৈরি করুন এটি একটি বিরল ঘটনা। সাধারণত, একটি লক ফাইল প্রজেক্ট ইনিশিয়ালাইজেশনে তৈরি করা হয় এবং আপনি যখন প্যাকেজ ইনস্টল/আপডেট করেন তখন প্রসারিত হয়। এটি মাথায় রেখে - আপনি যখন প্যাকেজ ম্যানেজার চয়ন করেন তখন এটির উপর নির্ভর করা খুব গুরুত্বপূর্ণ বিষয় বলে মনে হয় না। নির্ভরতা ইনস্টল করুন বেশিরভাগ ক্ষেত্রে, আপনার প্রকল্পগুলি নির্ভরতার একটি নির্দিষ্ট তালিকা রাখে এবং আপনি খুব কমই কিছু যোগ/সরান। সম্ভবত, আপনি সময়ে সময়ে আপনার প্যাকেজগুলির সংস্করণগুলিকে বাম্প করবেন - এই পরিবর্তনগুলি ছোট এবং আপনি ক্যাশে থেকে বাকি প্যাকেজগুলি পুনরায় ব্যবহার করবেন৷ অন্য কথায়, সাধারণ ব্যবহারের ক্ষেত্রে হল -- প্যাকেজ রেজিস্ট্রি থেকে নতুন প্যাকেজ আনুন এবং বাকিগুলি ক্যাশে থেকে নিন। (5-8 সেকেন্ড) মাঝখানে (8-11 সেকেন্ড) সহ (8-18 সেকেন্ড) থেকে প্রায় দ্বিগুণ দ্রুত। পিএনপিএম সুতা npm উপসংহার তথ্য প্রকৃতপক্ষে প্যাকেজ ম্যানেজার - বর্তমান পর্যালোচনায় এটি বেশ স্পষ্ট! pnpm "একটি দ্রুত এবং ডিস্ক দক্ষ" ওয়ার্কস্পেস বৈশিষ্ট্যটি বাগ করা হয়েছে এবং কিছু বাগ বছরের পর বছর ধরে অমীমাংসিত হয়েছে। pnpm এবং উভয়ের জন্যই সিআই পাইপলাইনে একটি অতিরিক্ত সেটআপের প্রয়োজন হয়, যখন করে না। পিএনপিএম সুতা এনপিএম তা এবং উভয়ই তাদের লক ফাইলগুলিতে প্যাকেজ রেজিস্ট্রি তথ্য সংরক্ষণ করে না, যখন করে। পিএনপিএম সুতা এনপিএম লেখকের চিন্তাধারা আমি মনে করি সর্বোত্তম কাজ করে যদি প্যাকেজ ম্যানেজারের জন্য আপনার প্রয়োজনীয়তা "শুধুমাত্র নির্ভরতা ইনস্টল" এর মতো সহজ হয়। পিএনপিএম যদিও একটি ইনস্টলার আউট-অফ-এ-বক্সের সাথে আসে না, বা সহ CI পাইপলাইনে সেট আপ করা সহজ। pnpm Node.js কোরপ্যাক বিদ্যমান অ্যাকশন আমি পছন্দ করি, কারণ: npm এটি স্থিতিশীল (বিশেষ করে কর্মক্ষেত্র), এর সাথে আসে এবং CI পাইপলাইনে অতিরিক্ত সেটআপের প্রয়োজন হয় না, Node.js এ প্যাকেজ রেজিস্ট্রিগুলি সঞ্চয় করে যাতে আপনি বিভিন্ন রেজিস্ট্রি থেকে একক সুযোগের সাথে নির্ভরতা ইনস্টল করতে সক্ষম হন। package-lock.json এই সুবিধাগুলি সেকেন্ডের গতি এবং ডিস্কের স্থানকে ছাড়িয়ে যায় যা আমি বা দিয়ে সংরক্ষণ করব। সুতা pnpm প্যাকেজ ম্যানেজার নির্বাচন করার জন্য আপনার মানদণ্ড কি? লাজুক হবেন না, এবং নীচের মন্তব্য বিভাগে আপনার চিন্তা আমাকে জানান! 👇😊