macOS-এ একটি npm ওয়ার্কস্পেস প্রজেক্টে একটি প্যাকেজের জন্য ডিপেন্ডেন্সি ইনস্টল করতে, প্রজেক্টের রুট থেকে npm install --workspace="packages/web" রান করুন, যেখানে packages/web-এর পরিবর্তে ওয়ার্কস্পেসের পাথ বা এর প্যাকেজের নাম ব্যবহার করবেন। আপনি সেই ওয়ার্কস্পেস ডিরেক্টরিতে গিয়ে npm install-ও চালাতে পারেন। এই কমান্ডগুলো npm-এর প্রজেক্টে একটি ওয়ার্কস্পেস নির্বাচন করে; এগুলো আলাদা কোনো ইনস্টলেশন ডিরেক্টরি তৈরি করে না বা এটি নিশ্চিত করে না যে কেবল সেই প্যাকেজের ফাইলগুলোই পরিবর্তিত হবে।
প্রজেক্টটি একটি npm ওয়ার্কস্পেস কিনা তা যাচাই করুন
একটি npm ওয়ার্কস্পেস হলো রুটের package.json-এ workspaces-এর অধীনে তালিকাভুক্ত একটি প্যাকেজ ডিরেক্টরি। উদাহরণস্বরূপ, একটি রিপোজিটরিতে একটি রুট package.json এবং একটি packages/web/package.json থাকতে পারে, যেখানে রুটের ওয়ার্কস্পেস তালিকায় "packages/*" উল্লেখ থাকে। লোকাল প্যাকেজগুলো শনাক্ত ও লিংক করার জন্য npm এই কনফিগারেশন ব্যবহার করে। ফোল্ডারটি যদি ওয়ার্কস্পেস হিসেবে কনফিগার করা না থাকে, তবে --workspace এটিকে টার্গেট করতে পারবে না। দেখুন npm-এর ওয়ার্কস্পেস সংক্রান্ত ডকুমেন্টেশন।
টার্মিনালে, রিপোজিটরির রুটে যান। macOS-এ যেসব পাথে স্পেস রয়েছে সেগুলোকে কোটেশনের মধ্যে রাখুন যাতে শেল সেই পাথটিকে একটি একক আর্গুমেন্ট হিসেবে গণ্য করে:
cd "$HOME/Projects/sample monorepo"
npm install --workspace="packages/web"
এখানে, packages/web হলো রিপোজিটরির রুটের সাপেক্ষে একটি উদাহরণ পাথ। এর পরিবর্তে আপনি কনফিগার করা ওয়ার্কস্পেসের প্যাকেজের নামও ব্যবহার করতে পারেন, যেমন npm install --workspace="@example/web"। npm বৈধ সিলেক্টর হিসেবে ওয়ার্কস্পেসের নাম, ওয়ার্কস্পেস ডিরেক্টরির পাথ এবং প্যারেন্ট ওয়ার্কস্পেসের পাথ উল্লেখ করে। নির্দিষ্ট প্যাকেজের পাথ বা নাম ব্যবহার করাই শ্রেয়: কোনো প্যারেন্ট ওয়ার্কস্পেস ডিরেক্টরি নির্বাচন করলে তার অধীনে থাকা প্রতিটি ওয়ার্কস্পেস নির্বাচিত হতে পারে। npm-এর npm install অপশনগুলো সিলেক্টরের বিষয়টি বিশদভাবে বর্ণনা করে।
নির্বাচিত ওয়ার্কস্পেসের ডিক্লেয়ার করা ডিপেন্ডেন্সিগুলো ইনস্টল করুন
উপরের কমান্ডটি নির্বাচিত ওয়ার্কস্পেসের প্রেক্ষিতে ইনস্টলেশন রান করে। install-এর পরে কোনো প্যাকেজের নাম না থাকলে, npm প্রজেক্ট মেনিফেস্টে ইতোমধ্যে ডিক্লেয়ার করা ডিপেন্ডেন্সিগুলো ইনস্টল করে; এটি packages/web/package.json-এ নতুন কোনো ডিপেন্ডেন্সি যোগ করে না। include-workspace-root সক্রিয় না থাকলে, একটি স্বতন্ত্র ওয়ার্কস্পেস নির্বাচন করার সময় npm-এর ওয়ার্কস্পেস কনফিগারেশন ডিফল্টভাবে রুট প্রজেক্টটিকে বাদ দেয়। npm কনফিগারেশন রেফারেন্স এই উভয় অপশনই নথিভুক্ত করেছে।
আপনি যে প্যাকেজটি যুক্ত করতে চান, ওয়ার্কস্পেস সিলেক্টরের আগে সেটির নাম অন্তর্ভুক্ত করুন:
npm install date-fns --workspace="packages/web"
এটি npm-কে সেই ওয়ার্কস্পেসের ডিপেন্ডেন্সিতে date-fns যোগ করতে এবং তা ইনস্টল করতে নির্দেশ দেয়। ডিপেন্ডেন্সিটি যেখানে চেয়েছেন সেখানেই রেকর্ড হয়েছে কিনা তা নিশ্চিত করতে পরে ওয়ার্কস্পেসের package.json পরীক্ষা করুন। npm-এর ওয়ার্কস্পেস নির্দেশিকা কোনো নামযুক্ত ওয়ার্কস্পেসে ডিপেন্ডেন্সি যোগ করার ক্ষেত্রে একই প্যাটার্ন প্রদর্শন করে।
এর পরিবর্তে ওয়ার্কস্পেস ডিরেক্টরিটি ব্যবহার করুন
আপনি যদি ইতোমধ্যে প্যাকেজ ফোল্ডারে কাজ করে থাকেন, তবে --workspace নির্দিষ্ট না করে আপনি সেখানেই npm install চালাতে পারেন:
cd "$HOME/Projects/sample monorepo/packages/web"
npm install
npm উল্লেখ করে যে, একটি ওয়ার্কস্পেসের ভেতর থেকে কোনো কমান্ড চালালে তা পরোক্ষভাবে ওয়ার্কস্পেস কনটেক্সট সেট করে এবং প্রজেক্ট প্রিফিক্স হিসেবে ওয়ার্কস্পেস রুট ব্যবহার করে। কোনো একটি প্যাকেজের জন্য নিবেদিত টার্মিনাল ট্যাবে এটি সুবিধাজনক হতে পারে। বর্তমান ডিরেক্টরিটি কোন প্যাকেজের অন্তর্ভুক্ত সে সম্পর্কে আপনি নিশ্চিত না হলে, পরিচিত রিপোজিটরি রুট থেকে স্পষ্ট --workspace কমান্ডটি ব্যবহার করুন।
“একটি ওয়ার্কস্পেস” কী বোঝায় এবং কী বোঝায় না তা জানুন
একটি ওয়ার্কস্পেস নির্বাচন করা কমান্ডের ওয়ার্কস্পেস কনটেক্সটকে সীমাবদ্ধ করে; এটি ফিজিক্যালি আলাদা কোনো node_modules ট্রির প্রতিশ্রুতি দেয় না। npm ওয়ার্কস্পেসগুলো একটি শীর্ষ-স্তরের প্রজেক্ট থেকে পরিচালিত হয় এবং npm লোকাল ওয়ার্কস্পেসগুলোকে রুটের node_modules ডিরেক্টরিতে লিংক করতে পারে। ডিপেন্ডেন্সি ট্রির অনুমতিক্রমে ডিপেন্ডেন্সিগুলো হোয়েস্ট বা শেয়ার করা হতে পারে। অতএব, ইনস্টলেশনটি রিপোজিটরির যৌথ ইনস্টলেশন অবস্থা এবং লকফাইলকে প্রভাবিত করতে পারে। ভার্সন কন্ট্রোলে পরিবর্তনের ফলাফল পর্যালোচনা করুন, বিশেষ করে যদি আপনি কেবল প্যাকেজ-সম্পর্কিত ফাইলসিস্টেম পরিবর্তনের প্রত্যাশা করে থাকেন। npm-এর ইনস্টল সংক্রান্ত ডকুমেন্টেশন এর ডিপেন্ডেন্সি-ট্রি আচরণ এবং ওয়ার্কস্পেস লিংকিং ব্যাখ্যা করে।
আপনার লক্ষ্য যদি মনোরেপো থেকে বিচ্ছিন্ন একটি সম্পূর্ণ স্বতন্ত্র ইনস্টলেশন হয়, তবে ওয়ার্কস্পেস সিলেক্টর সেই উপায় নয়। একটি ওয়ার্কস্পেস কনফিগার করা রুট প্রজেক্টের অংশ; এটিকে টার্গেট করলে এটি কোনো স্বাধীন রিপোজিটরি বা ইনস্টল ট্রিতে রূপান্তরিত হয় না।
npm যদি টার্গেট শনাক্ত করতে না পারে
প্রথমে নিশ্চিত হন যে রিপোজিটরির রুটের সাপেক্ষে পাথটি সঠিক এবং এর package.json বিদ্যমান। তারপর রুটের package.json পরীক্ষা করে নিশ্চিত করুন যে এর workspaces প্যাটার্নে সেই ফোল্ডারটি অন্তর্ভুক্ত রয়েছে। নাম ব্যবহার করলে, নিশ্চিত করুন যে এটি ওয়ার্কস্পেস প্যাকেজের name ফিল্ডের সাথে মিলছে। রিপোজিটরির রুট থেকে কমান্ডটি রান করুন, অথবা সরাসরি উদ্দিষ্ট ওয়ার্কস্পেস ডিরেক্টরিতে যান। যখন আপনি একটি প্যাকেজ চান তখন --workspaces এড়িয়ে চলুন: এই বহুবচন অপশনটি কনফিগার করা সমস্ত ওয়ার্কস্পেস নির্বাচন করে। ব্যবহারিক নিয়মটি সহজ: যখন আপনি একটি নির্দিষ্ট টার্গেট চান তখন রুট থেকে --workspace="path" ব্যবহার করুন এবং npm-এর কাজ শেষ হওয়ার পর মেনিফেস্ট ও রিপোজিটরির পরিবর্তনগুলো যাচাই করুন।
উৎসসমূহ
- npm-install — npm ডক্স
- Workspaces — npm ডক্স
- Config — npm ডক্স