لجعل مهمة VS Code تنتظر انتهاء البناء قبل تشغيل أمر آخر على نظام macOS، حدد البناء كتبعية واضبط "dependsOrder": "sequence" في المهمة التي تعتمد عليه. يقوم VS Code بتشغيل التبعيات المتعددة بالتوازي افتراضيًا، لذا فإن إدراج البناء أولاً ليس كافيًا. يقوم المثال أدناه بتشغيل npm run build حتى يكتمل قبل npm test.

تحديد البناء والمهمة المعتمدة

في مشروعك، افتح لوحة الأوامر (Command Palette) باستخدام ⇧⌘P، وشغّل Tasks: Configure Task، أو استخدم Terminal > Configure Tasks. أنشئ أو عدّل الملف .vscode/tasks.json في مساحة العمل. احتفظ بأي مهام حالية لا تزال بحاجة إليها، وأضف مهامًا مثل هذه داخل مصفوفة tasks الخاصة به:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build project",
      "type": "shell",
      "command": "npm run build",
      "problemMatcher": []
    },
    {
      "label": "Test after build",
      "dependsOn": ["Build project"],
      "dependsOrder": "sequence"
    }
  ]
}

المهمة المعتمدة ليس لها أمر خاص بها: وظيفتها هي تشغيل التبعية أولاً. لجعلها تنفذ إجراءً لاحقًا، أضف أمرًا ونوع مهمة shell، على سبيل المثال "type": "shell" و "command": "npm test"، إلى Test after build. شغّل تلك المهمة الأصلية من خلال Terminal > Run Task أو أمر لوحة الأوامر Tasks: Run Task. تنص وثائق VS Code على أن dependsOn تجمع المهام، وأن التبعيات تعمل بالتوازي افتراضيًا، وأن dependsOrder: "sequence" يشغلها بالترتيب المذكور. التكامل مع الأدوات الخارجية عبر المهام

يفترض هذا المثال أن ملف package.json الخاص بالمشروع يحدد نصوصًا برمجية صالحة للعمل لكل من build و test، وأن npm متاح لـ VS Code. استبدل الأوامر بأوامر البناء والمتابعة الفعلية لمشروعك. على نظام macOS، تعمل مهام shell في VS Code من خلال غلاف أوامر (shell)؛ إذا كتبت أمرًا كسلسلة نصية واحدة، فضمّن علامات الاقتباس أو الإفلات التي يتطلبها الغلاف. وعلى وجه الخصوص، ضع المسارات التي تحتوي على مسافات بين علامات اقتباس، مثل "command": "./scripts/build.sh 'Assets Folder'". التكامل مع الأدوات الخارجية عبر المهام

ماذا يعني "الانتظار" بالنسبة للبناء

بالنسبة لعملية بناء عادية تُنفذ لمرة واحدة، يسمح التسلسل للتبعية بالانتهاء قبل بدء التبعية التالية أو المهمة الأصلية. يعمل هذا عندما يخرج أمر البناء بعد اكتماله. إذا قمت بإدراج عدة تبعيات، فرتّبها بالتسلسل حسب ترتيب ظهورها في dependsOn؛ فبدون dependsOrder، قد يبدأ VS Code في تشغيلها معًا.

تتصرف مهمة المراقبة (watch task) بشكل مختلف لأنها مخصصة لمواصلة العمل. توضح وثائق VS Code أن مهام الخلفية في سلسلة التبعية المتسلسلة تحتاج إلى مطابِق للمشاكل (problem matcher) يكتشف متى تصبح "منتهية". بالنسبة للمراقب، يعني ذلك تحديد مطابِق يتعرف على حالة جاهزيته؛ وإلا فلن يتمكن VS Code من تحديد متى يكون جاهزًا للمضي قدمًا. لا ينبغي عادةً للبناء الذي يُنفذ لمرة واحدة استخدام وضع المراقبة أو isBackground. التكامل مع الأدوات الخارجية عبر المهام

تشغيلها وتشخيص المشاكل الشائعة

احفظ tasks.json، ثم شغّل Test after build من Terminal > Run Task. اقرأ مخرجات الطرفية المدمجة للتأكد من تشغيل الأمر الفعلي وانتهائه. إذا كانت المهمة الأصلية مفقودة أو لم يبدأ البناء أولاً، فتحقق من هذه النقاط:

  • التسمية في dependsOn تطابق تمامًا label الخاصة بمهمة البناء—بما في ذلك المسافات وحالة الأحرف.
  • كلا تعريفي المهام موجودان داخل نفس مصفوفة tasks، والملف يستخدم إصدار المهام 2.0.0.
  • تم تعيين dependsOrder في المهمة الأصلية، إلى جانب dependsOn.
  • يعمل أمر shell من مجلد مساحة العمل، أو قم بتعيين options.cwd إذا كان البرنامج النصي للبناء موجودًا في مجلد فرعي.
  • إذا كان البناء مراقبًا، فقم بتكوين مطابِق مشاكل في الخلفية يشير إلى الجاهزية؛ فمجرد تعيين isBackground لا يخبر VS Code بموعد جاهزيته.

يوثق VS Code إعدادات المهام الخاصة بكل نظام تشغيل، بما في ذلك قسم osx، ولكن آلية ترتيب التبعيات هي نفسها: dependsOn و dependsOrder. لا تحتاج إلى أمر shell مبتكر لـ "الانتظار" في سلسلة المهام هذه. الحد الموثق هو أن مهمة الخلفية التي تعمل لفترة طويلة تحتاج إلى مطابِق مشاكل للإبلاغ عن جاهزيتها. ملحق: مخطط tasks.json

المصادر