macOS पर VS Code टास्क द्वारा दूसरा कमांड चलाने से पहले बिल्ड पूरा होने की प्रतीक्षा कराने के लिए, बिल्ड को एक निर्भरता (dependency) के रूप में परिभाषित करें और उस पर निर्भर टास्क पर "dependsOrder": "sequence" सेट करें। VS Code डिफ़ॉल्ट रूप से एकाधिक निर्भरताओं को समानांतर रूप से चलाता है, इसलिए केवल बिल्ड को पहले सूचीबद्ध करना पर्याप्त नहीं है। नीचे दिया गया उदाहरण npm test से पहले npm run build को पूरी तरह समाप्त होने तक चलाता है।

बिल्ड और आश्रित टास्क को परिभाषित करें

अपने प्रोजेक्ट में, ⇧⌘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"
    }
  ]
}

आश्रित टास्क (dependent task) का अपना कोई कमांड नहीं होता: इसका काम पहले निर्भरता को चलाना है। इसके द्वारा कोई अनुवर्ती कार्रवाई (follow-up action) कराने के लिए, Test after build में एक कमांड और शेल टास्क प्रकार जोड़ें, उदाहरण के लिए "type": "shell" और "command": "npm test"। उस पैरेंट टास्क को Terminal > Run Task या कमांड पैलेट के Tasks: Run Task कमांड के माध्यम से चलाएं। VS Code का दस्तावेज़ीकरण कहता है कि dependsOn टास्क को संयोजित (compose) करता है, निर्भरताएं डिफ़ॉल्ट रूप से समानांतर चलती हैं, और dependsOrder: "sequence" उन्हें सूचीबद्ध क्रम में चलाता है। Integrate with External Tools via Tasks

यह उदाहरण मानता है कि प्रोजेक्ट का package.json कार्यशील build और test स्क्रिप्ट को परिभाषित करता है और npm VS Code के लिए उपलब्ध है। कमांड को अपने प्रोजेक्ट के वास्तविक बिल्ड और अनुवर्ती कमांड से बदलें। macOS पर, VS Code शेल टास्क एक शेल के माध्यम से चलते हैं; यदि आप किसी कमांड को एक स्ट्रिंग के रूप में लिखते हैं, तो उसके शेल के लिए आवश्यक कोटिंग (quoting) या एस्केपिंग शामिल करें। विशेष रूप से, स्पेस वाले पाथ को कोट करें, जैसे "command": "./scripts/build.sh 'Assets Folder'"। Integrate with External Tools via Tasks

बिल्ड के लिए "प्रतीक्षा" (wait) का क्या अर्थ है

एक सामान्य वन-शॉट बिल्ड के लिए, यह क्रम (sequence) अगली निर्भरता या पैरेंट टास्क को शुरू करने से पहले निर्भरता को समाप्त होने देता है। यह तब काम करता है जब बिल्ड कमांड पूरा होने के बाद बाहर निकल (exit हो) जाता है। यदि आप कई निर्भरताओं को सूचीबद्ध करते हैं, तो उन्हें उसी क्रम में रखें जिस क्रम में वे dependsOn में दिखाई देती हैं; dependsOrder के बिना, VS Code उन्हें एक साथ शुरू कर सकता है।

एक वॉच (watch) टास्क अलग तरह से व्यवहार करता है क्योंकि इसका उद्देश्य लगातार चलते रहना होता है। VS Code दस्तावेज़ बताता है कि क्रमिक निर्भरता श्रृंखला में बैकग्राउंड टास्क को एक प्रॉब्लम मैचर (problem matcher) की आवश्यकता होती है जो यह पता लगाता है कि वे कब "पूर्ण" (done) हुए हैं। एक वॉचर के लिए, इसका मतलब एक ऐसा मैचर परिभाषित करना है जो इसकी तैयार स्थिति (ready state) को पहचानता है; अन्यथा, VS Code यह निर्धारित नहीं कर सकता कि यह आगे बढ़ने के लिए कब तैयार है। एक बार के बिल्ड को आमतौर पर वॉच मोड या isBackground का उपयोग नहीं करना चाहिए। Integrate with External Tools via Tasks

इसे चलाएं और सामान्य समस्याओं का निदान करें

tasks.json को सहेजें, फिर Terminal > Run Task से Test after build चलाएं। यह पुष्टि करने के लिए कि वास्तविक कमांड चला और समाप्त हो गया, इंटीग्रेटेड टर्मिनल आउटपुट पढ़ें। यदि पैरेंट टास्क गायब है या बिल्ड पहले शुरू नहीं होता है, तो इन बिंदुओं की जांच करें:

  • dependsOn में दिया गया लेबल बिल्ड टास्क के label से बिल्कुल मेल खाता हो—जिसमें स्पेस और कैपिटलाइज़ेशन शामिल हैं।
  • दोनों टास्क परिभाषाएं एक ही tasks ऐरे के अंदर हैं, और फ़ाइल टास्क संस्करण 2.0.0 का उपयोग करती है।
  • dependsOrder पैरेंट टास्क पर सेट है, dependsOn के साथ।
  • शेल कमांड वर्कस्पेस फ़ोल्डर से काम करता है, या यदि बिल्ड स्क्रिप्ट किसी सबफ़ोल्डर में स्थित है तो options.cwd सेट करें।
  • यदि बिल्ड एक वॉचर है, तो एक बैकग्राउंड प्रॉब्लम मैचर कॉन्फ़िगर करें जो तत्परता (readiness) का संकेत देता है; केवल isBackground सेट करने से VS Code को यह पता नहीं चलता कि यह कब तैयार है।

VS Code प्लेटफ़ॉर्म-विशिष्ट टास्क कॉन्फ़िगरेशन का दस्तावेज़ीकरण करता है, जिसमें एक osx अनुभाग भी शामिल है, लेकिन निर्भरता क्रम तंत्र वही है: dependsOn और dependsOrder। आपको इस टास्क श्रृंखला के लिए किसी मनगढ़ंत "wait" शेल कमांड की आवश्यकता नहीं है। प्रलेखित सीमा यह है कि लंबे समय तक चलने वाले बैकग्राउंड टास्क को अपनी तत्परता की रिपोर्ट करने के लिए एक प्रॉब्लम मैचर की आवश्यकता होती है। Appendix: Schema for tasks.json

स्रोत