لتثبيت الاعتماديات لحزمة واحدة في مشروع مساحات عمل npm على نظام macOS، شغّل npm install --workspace="packages/web" من جذر المشروع، مع استبدال packages/web بمسار مساحة العمل أو اسم الحزمة الخاص بها. يمكنك أيضًا الانتقال إلى دليل مساحة العمل تلك وتشغيل npm install. تحدد هذه الأوامر مساحة عمل في مشروع npm؛ ولا تنشئ دليل تثبيت منفصل أو تضمن أن ملفات تلك الحزمة وحدها هي التي ستتغير.

التحقق من أن المشروع يمثل مساحة عمل npm

مساحة عمل npm هي دليل حزمة مدرج في ملف package.json الرئيسي تحت workspaces. على سبيل المثال، قد يحتوي المستودع على package.json في الجذر وpackages/web/package.json، مع وجود "packages/*" في قائمة مساحات العمل في الجذر. يستخدم npm هذا الإعداد للتعرف على الحزم المحلية وربطها. إذا لم يكن المجلد مهيأً كمساحة عمل، فلن يتمكن خيار --workspace من استهدافه كواحدة. راجع توثيق مساحات العمل (workspaces) الخاص بـ npm.

في تطبيق Terminal، انتقل إلى جذر المستودع. في نظام macOS، ضع المسارات التي تحتوي على مسافات بين علامات اقتباس حتى يتعامل سطر الأوامر مع المسار كوسيطة واحدة:

cd "$HOME/Projects/sample monorepo"
npm install --workspace="packages/web"

هنا، يُعد packages/web مسارًا توضيحيًا نسبيًا بالنسبة لجذر المستودع. يمكنك استخدام اسم الحزمة لمساحة عمل مهيأة بدلاً من ذلك، مثل npm install --workspace="@example/web". يوثق npm أسماء مساحات العمل، ومسارات أدلة مساحات العمل، ومسارات مساحات العمل الأصلية كمحددات صالحة. يُفضل استخدام مسار الحزمة المحدد أو اسمها: فتحديد دليل مساحة عمل أصلية يمكن أن يؤدي إلى تحديد كل مساحة عمل تابعة له. تصف خيارات npm install في npm آلية هذا المحدد.

تثبيت الاعتماديات المعلنة لمساحة العمل المحددة

يقوم الأمر أعلاه بتشغيل التثبيت في سياق مساحة العمل المحددة. في حال عدم وجود اسم حزمة يتبع install، يثبت npm الاعتماديات المعلنة بالفعل في ملفات البيان (manifests) الخاصة بالمشروع؛ ولا يضيف اعتمادية جديدة إلى packages/web/package.json. يتم ضبط إعدادات مساحة العمل في npm افتراضيًا لاستبعاد المشروع الجذر عند تحديد مساحة عمل فردية، ما لم يتم تمكين include-workspace-root. يوثق مرجع إعدادات npm كلا الخيارين.

بالنسبة لحزمة تريد إضافتها، قم بتضمين اسمها قبل محدد مساحة العمل:

npm install date-fns --workspace="packages/web"

يطلب هذا من npm إضافة date-fns إلى اعتماديات مساحة العمل تلك وتثبيتها. تحقق من ملف package.json الخاص بمساحة العمل بعد ذلك للتأكد من تسجيل الاعتمادية في المكان المقصود. يقدم دليل مساحات العمل في npm نفس النمط لإضافة اعتمادية إلى مساحة عمل مسماة.

استخدام دليل مساحة العمل بدلاً من ذلك

إذا كنت تعمل بالفعل داخل مجلد الحزمة، يمكنك تشغيل npm install هناك بدلاً من تحديد --workspace:

cd "$HOME/Projects/sample monorepo/packages/web"
npm install

يوثق npm أن تشغيل أمر من داخل مساحة عمل يحدد ضمنيًا سياق مساحة العمل ويستخدم جذر مساحة العمل كبادئة للمشروع. يمكن أن يكون هذا مناسبًا في علامة تبويب طرفية مخصصة لحزمة واحدة. إذا لم تكن متأكدًا من الحزمة التي ينتمي إليها الدليل الحالي، فاستخدم الأمر الصريح --workspace من جذر المستودع المعروف.

التعرف على ما يعنيه وما لا يعنيه مفهوم "مساحة عمل واحدة"

تحديد مساحة عمل واحدة يقصر سياق الأمر على مساحة العمل تلك؛ ولكنه لا يضمن وجود شجرة node_modules منفصلة فعليًا. تتم إدارة مساحات عمل npm من مشروع المستوى الأعلى، ويمكن لـ npm ربط مساحات العمل المحلية بدليل node_modules الجذر. قد يتم رفع (hoisting) الاعتماديات أو مشاركتها حيثما تسمح شجرة الاعتماديات بذلك. وبالتالي، قد يؤثر التثبيت على حالة التثبيت المشتركة للمستودع وعلى ملف القفل (lockfile). راجع التغييرات الناتجة في نظام التحكم في الإصدار، لا سيما إذا كنت تتوقع تغييرًا يقتصر على ملفات الحزمة فقط. يشرح توثيق التثبيت الخاص بـ npm سلوك شجرة الاعتماديات وربط مساحات العمل.

إذا كان هدفك هو تثبيت مستقل تمامًا ومعزول عن المستودع المتعدد (monorepo)، فإن محدد مساحة العمل ليس الأداة المناسبة لذلك. مساحة العمل هي جزء من المشروع الجذر المُهيأ؛ واستهدافها لا يحولها إلى مستودع مستقل أو شجرة تثبيت مستقلة.

إذا لم يتعرف npm على الهدف

تحقق أولاً من صحة المسار بالنسبة لجذر المستودع ومن وجود ملف package.json الخاص به. ثم افحص ملف package.json الجذر وتأكد من أن أنماط workspaces تتضمن ذلك المجلد. إذا كنت تستخدم اسمًا، فتأكد من مطابقته لحقل name الخاص بحزمة مساحة العمل. شغّل الأمر من جذر المستودع، أو انتقل مباشرةً إلى دليل مساحة العمل المقصودة. تجنب استخدام --workspaces عندما تريد حزمة واحدة: فالخيار بصيغة الجمع يحدد جميع مساحات العمل المُهيأة. القاعدة العملية بسيطة: استخدم --workspace="path" من الجذر عندما تريد هدفًا صريحًا، وتحقق من التغييرات في ملف البيان والمستودع بعد انتهاء npm.

المصادر