আপনার ম্যাক-এ একটি প্রজেক্ট কোন Node.js সংস্করণ প্রত্যাশা করে তা খুঁজে পেতে, টার্মিনালে সক্রিয় সংস্করণটি পরীক্ষা করার আগে এর সংস্করণ ফাইল এবং কনফিগারেশন পরিদর্শন করুন। .nvmrc দিয়ে শুরু করুন, তারপর volta এবং engines সেটিংসের জন্য package.json পরীক্ষা করুন। এই সূত্রগুলোর বিভিন্ন অর্থ রয়েছে: কিছু একটি টুলের জন্য একটি সংস্করণ পিন করে, আবার অন্যগুলো সামঞ্জস্যতার একটি পরিসীমা বর্ণনা করে।

১. টার্মিনালে প্রজেক্ট ফোল্ডারটি খুলুন

ফাইন্ডার (Finder)-এ, প্রজেক্ট ফোল্ডারটি সনাক্ত করুন। এটিতে Control-ক্লিক করুন এবং সেই বিকল্পটি উপলব্ধ থাকলে New Terminal at Folder বেছে নিন; অন্যথায় টার্মিনাল খুলুন এবং cd দিয়ে ফোল্ডারে নেভিগেট করুন। আপনি cd টাইপ করার পরে ফাইন্ডার থেকে ফোল্ডারটি টার্মিনাল উইন্ডোতে টেনে আনতে পারেন, তারপর Return চাপুন। এটি স্পেস রয়েছে এমন একটি পাথ ভুলভাবে টাইপ করা এড়ায়।

প্রজেক্ট ডিরেক্টরি থেকে এই রিড-অনলি (read-only) কমান্ডগুলো চালান:

ls -a
grep -nE '"(engines|volta)"|"node"' package.json .nvmrc

ls -a লুকানো ফাইলগুলো অন্তর্ভুক্ত করে যেমন .nvmrc। grep বিদ্যমান ফাইলগুলো থেকে ম্যাচ করা লাইনগুলো প্রিন্ট করে; যদি একটি ফাইল অনুপস্থিত থাকে, তবে এটি সেই ফাইলের জন্য একটি ত্রুটি প্রিন্ট করতে পারে, যার অর্থ এই নয় যে প্রজেক্টটি নষ্ট হয়ে গেছে। একটি নির্দিষ্ট ফাইল আরও বিস্তারিতভাবে পরিদর্শন করতে, ফাইলটি উপস্থিত থাকলে sed -n '1,160p' package.json বা sed -n '1,20p' .nvmrc ব্যবহার করুন। এই কমান্ডগুলো টেক্সট প্রদর্শন করে; তারা প্রজেক্ট পরিবর্তন করে না।

২. সংস্করণ-ম্যানেজারের নির্দেশনা হিসেবে .nvmrc পড়ুন

আপনি যদি .nvmrc খুঁজে পান, তবে এর বিষয়বস্তু পড়ুন। 20.16.0-এর মতো একটি মান নির্দেশ করে যে প্রজেক্টটি nvm ব্যবহারকারীদের জন্য সেই Node.js সংস্করণটি নির্দিষ্ট করে। nvm 20 বা lts/*-এর মতো সংস্করণ নির্বাচকগুলোকেও গ্রহণ করে, তাই ফাইলটি একটি নির্দিষ্ট প্যাচ রিলিজ নাও শনাক্ত করতে পারে। nvm ডকুমেন্টেশন বলছে যে এর কমান্ডগুলো প্রজেক্ট ডিরেক্টরিতে বা প্যারেন্ট ডিরেক্টরিতে .nvmrc খুঁজে পেতে পারে, এবং কোনো সংস্করণ ছাড়া nvm use উপলব্ধ থাকলে ফাইলটি ব্যবহার করে। nvm README: .nvmrc

macOS-এ, nvm উপলব্ধ কিনা এবং এই ডিরেক্টরিতে এটি কী রেজলভ করে তা পরীক্ষা করুন:

command -v nvm
nvm use
node --version

বর্তমান শেলে nvm লোড করা থাকলে command -v nvm-এর nvm প্রিন্ট করা উচিত। কমান্ডটি অনুপলব্ধ হলে, ধরে নেবেন না যে .nvmrc অবৈধ; আপনার nvm ইনস্টল বা লোড করা না থাকলেও ফাইলটি প্রজেক্টের পছন্দ নথিভুক্ত করতে পারে। ফাইলটিতে থাকা সংস্করণটি ইনস্টল করা থাকলে nvm use সেটি নির্বাচন করে; এটি অনুপস্থিত থাকলে, nvm আপনাকে এটি ইনস্টল করতে বলতে পারে। শুধুমাত্র তখনই একটি ইনস্টলেশন চালান যদি আপনি আপনার ম্যাক-এ সেই Node সংস্করণটি যোগ করতে চান।

৩. Volta এবং সামঞ্জস্যতার পরিসীমার জন্য package.json পরীক্ষা করুন

একটি শীর্ষ-স্তরের (top-level) volta অবজেক্ট সন্ধান করুন। উদাহরণস্বরূপ:

"volta": {
  "node": "20.16.0"
}

এটি Volta-পরিচালিত প্রজেক্টগুলোর জন্য একটি Node সংস্করণ পিন। Volta ডকুমেন্টেশন জানায় যে volta pin নির্বাচিত টুল সংস্করণগুলোকে package.json-এ সংরক্ষণ করে, এবং Volta নোড কমান্ডগুলোকে প্রজেক্ট সংস্করণে চালিত করে। Understanding Volta আপনি যদি Volta ব্যবহার করেন, তবে প্রজেক্ট ডিরেক্টরি থেকে node --version দেখাতে পারে টুলচেইনটি কোন সংস্করণ চালাচ্ছে; Volta ছাড়া, অবজেক্টটি প্রজেক্ট মেটাডেটা হিসেবে থাকে, ম্যাকওএস টার্মিনালের জন্য কোনো কমান্ড নয়।

এছাড়াও engines প্রপার্টি পরিদর্শন করুন, যা সাধারণত এভাবে লেখা হয়:

"engines": {
  "node": ">=18 <23"
}

এটি সামঞ্জস্যতার একটি পরিসীমা প্রদান করে, ডেভেলপাররা ইনস্টল করেছেন এমন সংস্করণটিই হতে হবে এমন নয়। npm-এর ডকুমেন্টেশন engines.node-কে বর্ণনা করে যে এটি নির্দিষ্ট করে একটি প্যাকেজ কোন কোন Node সংস্করণের সাথে কাজ করে; যদি না engine-strict সক্রিয় করা হয়, npm এটিকে কেবল পরামর্শমূলক হিসেবে গণ্য করে এবং নির্ভরতা (dependency) ইনস্টলেশনের সময় কেবল সতর্কবার্তা দিতে পারে। npm package.json documentation একটি বিস্তৃত পরিসীমা বোঝায় যে প্রজেক্টটি অনুমোদিত সংস্করণ জুড়ে সামঞ্জস্যপূর্ণ বলে দাবি করে; এটি কোনো একক নির্দিষ্ট প্রত্যাশিত সংস্করণ নির্ধারণ করে না।

৪. ফাইলগুলো তুলনা করুন এবং বিরোধপূর্ণ সূত্র সমাধান করুন

একটি নির্দিষ্ট .nvmrc বা Volta পিন-কে একটি নির্দিষ্ট টুল-পরিচালিত সংস্করণের সবচেয়ে শক্তিশালী সংকেত হিসেবে বিবেচনা করুন। engines.node-কে একটি সামঞ্জস্যতার সীমাবদ্ধতা হিসেবে বিবেচনা করুন। ফাইলগুলো যদি ভিন্নমত পোষণ করে—উদাহরণস্বরূপ, .nvmrc বলে 18 কিন্তু engines.node-এর প্রয়োজন >=20—তবে নীরবে যেকোনো একটি বেছে নেবেন না। ফাইলগুলো পুরনো হতে পারে, বিভিন্ন টুলের জন্য কাজ করতে পারে, বা সাম্প্রতিক কোনো পরিবর্তনের প্রতিফলন হতে পারে। প্রজেক্টের README এবং সেটআপ নির্দেশাবলী পরীক্ষা করুন, তারপর মেইনটেইনার বা দলের কাছে জিজ্ঞাসা করুন তারা অবদানকারীদের কোন ফাইলটি অনুসরণ করার প্রত্যাশা করেন।

প্রজেক্টগুলো অন্যান্য সংস্করণ ম্যানেজার দ্বারা ব্যবহৃত ফাইলে বা CI কনফিগারেশনেও সংস্করণ নির্ধারণ করতে পারে। যদি .nvmrc এবং package.json-এ কোনো দরকারি উত্তর না থাকে, তবে ls -a দিয়ে দৃশ্যমান প্রজেক্ট ফাইলগুলো খুঁজুন এবং সেটআপ ডকুমেন্টেশন এবং ওয়ার্কফ্লো কনফিগারেশন পরিদর্শন করুন। একটি CI ফাইল স্বয়ংক্রিয় বিল্ডের জন্য ব্যবহৃত সংস্করণটি দেখাতে পারে, তবে এটি স্থানীয় ডেভেলপার সেটআপ থেকে ভিন্ন হতে পারে; প্রজেক্টের প্রয়োজনীয়তা হিসেবে বিবেচনা করার আগে প্রেক্ষাপটটি নিশ্চিত করুন।

৫. আপনার ম্যাক আসলে কোন Node সংস্করণ ব্যবহার করছে তা যাচাই করুন

প্রজেক্টের নির্দেশনা শনাক্ত করার পরে, সক্রিয় রানটাইমের সাথে এটি তুলনা করুন:

node --version
command -v node

প্রথম কমান্ডটি সক্রিয় Node সংস্করণ রিপোর্ট করে; দ্বিতীয়টি আপনার শেলের PATH-এর মাধ্যমে নির্বাচিত এক্সিকিউটেবল পাথ দেখায়। এগুলো আপনার বর্তমান টার্মিনাল পরিবেশকে বর্ণনা করে, প্রজেক্টের নিজস্ব প্রয়োজনীয়তা নয়। nvm-এর ক্ষেত্রে, পরীক্ষা করার আগে প্রজেক্ট ডিরেক্টরি থেকে nvm use চালান। Volta-র ক্ষেত্রে, সেই ডিরেক্টরি থেকে পরীক্ষাগুলো চালান যাতে এর প্রজেক্ট সেটিংস প্রয়োগ হতে পারে। যদি রিপোর্ট করা সংস্করণটি এখনও পিনের থেকে আলাদা হয়, তবে প্রাসঙ্গিক ম্যানেজারটি ইনস্টল, লোড বা এই শেলে node এক্সিকিউটেবল নিয়ন্ত্রণ নাও করতে পারে।

ব্যবহারিক উত্তরটি উভয় দিক পড়ার মাধ্যমে আসে: রিপোজিটরির সংস্করণ ঘোষণা আপনাকে বলে এটি কী চায়, আর node --version আপনাকে বলে আপনার ম্যাক বর্তমানে কী চালাচ্ছে। যদি সেগুলো মেলে না, তবে স্থানীয় ফলাফলের ওপর নির্ভর করার আগে ম্যানেজার বা প্রজেক্টের নির্দেশনা সমাধান করুন।

সূত্রসমূহ