macOS-এ কোনো নোড প্রজেক্টের ইনস্টলেশন সাইজ কী কারণে বড় হচ্ছে তা খুঁজে পেতে, ইনস্টল করা প্যাকেজগুলো পরিমাপ করুন, তারপর সবচেয়ে বড় প্যাকেজগুলোকে npm-এর ডিপেন্ডেন্সি ট্রির মাধ্যমে ট্র্যাক করুন। টার্মিনালে, প্রজেক্ট ডিরেক্টরি থেকে শুরু করুন: du ডিস্ক ব্যবহার দেখায়, npm ls ইনস্টল করা ট্রি তালিকাভুক্ত করে এবং npm explain কোনো প্যাকেজ কেন উপস্থিত রয়েছে তা দেখায়। এগুলো বিভিন্ন প্রশ্নের উত্তর দেয়: আকার নির্দেশ করে কী জায়গা দখল করছে; ডিপেন্ডেন্সি চেইন নির্দেশ করে কী এটিকে নিয়ে এসেছে।
macOS-এ ইনস্টল করা প্যাকেজগুলো পরিমাপ করুন
টার্মিনাল খুলুন, প্রজেক্ট ফোল্ডারে যান এবং পরিমাপ করার আগে নিশ্চিত করুন যে এতে node_modules রয়েছে। নিম্নলিখিত কমান্ডগুলো macOS-এর ডিফল্ট zsh-এ কাজ করে এবং শেল ওয়াইল্ডকার্ড আচরণের ওপর নির্ভরতা এড়ায়:
cd "/path/to/your/project"
ls -ld node_modules
find node_modules -mindepth 1 -maxdepth 1 -type d -prune -exec du -sh {} + | sort -h
du -sh প্রতিটি ইমিডিয়েট ডিরেক্টরির জন্য মানুষের পড়ার উপযোগী মোট সাইজ রিপোর্ট করে, এবং sort -h সেই মোট হিসাবগুলোকে ছোট থেকে বড় ক্রমে সাজায়। সবচেয়ে বড় এন্ট্রিগুলো দেখতে নিচ থেকে পড়া শুরু করুন। find কমান্ডটি প্রতিটি শীর্ষ-স্তরের ডিরেক্টরিকে একবার পরিমাপ করে: উদাহরণস্বরূপ, এটি প্রতিটি স্কোপড প্যাকেজ আলাদাভাবে না দেখিয়ে node_modules/@example-কে একটি সম্মিলিত স্কোপ ডিরেক্টরি হিসেবে রিপোর্ট করে। এটি একটি কার্যকর প্রথম ধাপ, প্রতিটি ডিপেন্ডেন্সির আলাদাভাবে বরাদ্দকৃত খরচের কোনো রিপোর্ট নয়।
কমান্ডটি যদি বলে যে node_modules নেই, তবে প্রজেক্টটিতে হয়তো এখনো ইনস্টল করা ডিপেন্ডেন্সি ট্রি নেই, অথবা আপনি ভুল ডিরেক্টরিতে থাকতে পারেন। কেবল পরিমাপ করার জন্য কোনো কিছু ইনস্টল করার আগে প্রজেক্টের প্যাকেজ ম্যানেজার এবং লকফাইলটি যাচাই করে নিন। npm-এর লকফাইল একটি রিসলভড ডিপেন্ডেন্সি ট্রি বর্ণনা করে, আর ইনস্টল করা ফাইলগুলোই হলো যা du পরিমাপ করে। npm-এর package-lock ডকুমেন্টেশন
একটি বড় ডিরেক্টরিকে তার ডিপেন্ডেন্সি চেইনে ট্র্যাক করুন
npm-এর লজিক্যাল ডিপেন্ডেন্সি ট্রি পরীক্ষা করতে npm ls ব্যবহার করুন। এর ডিফল্ট আউটপুট শীর্ষ-স্তরের প্যাকেজগুলোর ওপর ফোকাস করে; --all ট্রানজিটিভ ডিপেন্ডেন্সি পর্যন্ত তালিকাটি প্রসারিত করে। npm ls ডকুমেন্টেশন
npm ls --all
একটি বড় প্রজেক্টের জন্য সম্পূর্ণ তালিকাটি সামলানো কঠিন হতে পারে। ট্রি থেকে কোনো সম্ভাব্য প্যাকেজের নাম পাওয়ার পর, npm-কে জিজ্ঞেস করুন এটি কেন ইনস্টল করা হয়েছে:
npm explain package-name
package-name-এর জায়গায় প্রকৃত নাম বসান, যেমন some-library। এর আউটপুট ডিপেন্ডেন্সি চেইন ধরে মূল প্রজেক্টের দিকে ট্র্যাক করে। npm যদি একাধিক কপি বা ভার্সন রিপোর্ট করে, তবে তালিকায় প্রাসঙ্গিক ইনস্টল করা অবস্থানটি শনাক্ত করুন এবং সেই পাথটি npm explain-এ পাস করুন, উদাহরণস্বরূপ:
npm explain node_modules/parent-package/node_modules/package-name
কোনো প্যাকেজ কেন ইনস্টল হয়েছে তা ট্র্যাক করার জন্য npm npm explain-এর বিশদ বিবরণ প্রদান করেছে, যার মধ্যে ডিপেন্ডেন্সি নেস্টেড থাকলে কোনো নির্দিষ্ট ফোল্ডারও অন্তর্ভুক্ত। npm explain ডকুমেন্টেশন
স্কোপড প্যাকেজ এবং নেস্টেড ফোল্ডার পরীক্ষা করুন
প্রথম পরিমাপটি @example-এর মতো একটি স্কোপকে একটি ডিরেক্টরিতে গ্রুপ করে। এর ভেতরের প্যাকেজ ডিরেক্টরিগুলো পরীক্ষা করতে, চালান:
find node_modules/@example -mindepth 1 -maxdepth 1 -type d -prune -exec du -sh {} + | sort -h
@example-এর জায়গায় প্রথম পরিমাপে দেখা স্কোপটি বসান। আপনি যদি ভেরিয়েবল বা স্পেসযুক্ত কোনো পাথ ব্যবহার করেন তবে স্কোপ পাথের চারপাশে কোটেশন ব্যবহার করুন। আনস্কোপড প্যাকেজের ক্ষেত্রে, সরাসরি তার ফোল্ডার পরিমাপ করুন, উদাহরণস্বরূপ du -sh "node_modules/some-library"। একটি প্যাকেজের ফোল্ডারে তার নিজস্ব নেস্টেড ডিপেন্ডেন্সি থাকতে পারে; আপনি যদি মোট হিসাব যোগ করেন তবে প্যারেন্ট এবং নেস্টেড উভয় ডিরেক্টরি পরিমাপ করার ফলে কিছু ফাইল দুইবার গণনা হতে পারে। এই সংখ্যাগুলো সম্ভাব্য প্যাকেজ চিহ্নিত করতে ব্যবহার করুন, প্রতিটি ব্রাঞ্চের জন্য সঠিক অবদান হিসাব করতে নয়।
এরপর, বড় প্যাকেজের ওপর বা পরিমাপ করা ডিরেক্টরির ভেতরে থাকা কোনো নেস্টেড প্যাকেজ পাথের ওপর npm explain চালান। ব্যাখ্যাটি যদি সরাসরি কোনো ডিপেন্ডেন্সিকে নির্দেশ করে, তবে সেই শীর্ষ-স্তরের প্যাকেজটিই হলো তদন্তের জন্য মূল ব্রাঞ্চ। একটি বড় ট্রানজিটিভ প্যাকেজ একাধিক ব্রাঞ্চের মধ্যেও ভাগ করা থাকতে পারে, তাই একটি পাথের অধীনে এর উপস্থিতি মানে এই নয় যে কেবল সেই সরাসরি ডিপেন্ডেন্সিটিই এটি ব্যবহার করছে। npm npm ls-কে একটি লজিক্যাল ট্রি হিসেবে বর্ণনা করে, যা node_modules-এর ফিজিক্যাল লেআউট থেকে ভিন্ন হতে পারে; ফোল্ডার নেস্টিংকে সম্পূর্ণ গ্রাফ মনে না করে সম্পর্কটি বুঝতে ব্যাখ্যার আউটপুট ব্যবহার করুন।
প্রোডাকশন ডিপেন্ডেন্সি থেকে ডেভেলপমেন্ট ডিপেন্ডেন্সি আলাদা করুন
একটি বড় ডেভেলপমেন্ট টুল প্রোডাকশন ইনস্টলেশনে অপ্রয়োজনীয় হতে পারে, যেখানে অ্যাপের জন্য একটি বড় রানটাইম ডিপেন্ডেন্সি প্রয়োজন হতে পারে। npm-এর আউটপুটে চেইনটি পরীক্ষা করুন এবং এটি কোনো ডেভেলপমেন্ট নাকি প্রোডাকশন ডিপেন্ডেন্সি থেকে এসেছে তা দেখুন। আপনি যদি শুধুমাত্র প্রোডাকশন-এর npm ইনস্টল তুলনা করতে চান, তবে npm ls --omit=dev অন-ডিস্ক ইনস্টলেশন ভিউ থেকে ডেভেলপমেন্ট ডিপেন্ডেন্সিগুলোকে বাদ দেয়; এটি সেগুলোকে package.json বা লকফাইল থেকে সরিয়ে দেয় না। অটোমেশনে অমিশন অপশন ব্যবহার করার আগে npm-এর আচরণ এবং ভার্সন নিশ্চিত করুন। npm-এর install ডকুমেন্টেশন
বড় আকারকে একটি সূত্র হিসেবে বিবেচনা করুন, কোনো প্যাকেজ অপ্রয়োজনীয় হওয়ার প্রমাণ হিসেবে নয়। কোনো ডিপেন্ডেন্সি অপসারণ বা প্রতিস্থাপন করার আগে আপনার অ্যাপ্লিকেশনের ইমপোর্ট, বিল্ড স্ক্রিপ্ট এবং ডিপ্লয়মেন্ট প্রক্রিয়ার জন্য কী প্রয়োজন তা যাচাই করুন। যদি কোনো লকফাইল উপস্থিত থাকে, তবে ইনস্টলগুলোর তুলনা করার সময় সেটি নজরে রাখুন: এটি রিসলভড ট্রি রেকর্ড করে এবং বর্তমান ফোল্ডারের সাথে অন্য কোনো ইনস্টল কেন ভিন্ন হতে পারে তা ব্যাখ্যা করতে সাহায্য করে।
একটি বাস্তবসম্মত সমাপ্তি বিন্দু
আপনি যখন সবচেয়ে বড় পরিমাপ করা ডিরেক্টরির নাম নির্ধারণ করতে পারেন, এর ভেতরের প্যাকেজ বা প্যাকেজগুলো শনাক্ত করতে পারেন এবং সেগুলোকে মূল ডিপেন্ডেন্সির সাথে যুক্ত করতে npm explain ব্যবহার করতে পারেন যা সেগুলোকে নিয়ে এসেছে, তখন আপনার কাছে একটি কার্যকর উত্তর থাকে। এটি আপনাকে পর্যালোচনার জন্য একটি নির্দিষ্ট ব্রাঞ্চ দেয়। কেবল ডিস্ক ব্যবহার দেখে ব্রাঞ্চটি সরানো নিরাপদ কিনা তা নির্ধারণ করা যায় না, এবং ফাইল বা ডিপেন্ডেন্সি যখন শেয়ার করা থাকে তখন npm-এর ডিপেন্ডেন্সি কমান্ডগুলো কোনো প্যাকেজের একক বা এক্সক্লুসিভ অংশ হিসাব করে না।
সোর্সসমূহ
package-lock.json — npm
Terminal User Guide for Mac — Apple