macOS-এ অন্য কোনো কমান্ড চালানোর আগে একটি VS Code টাস্ককে বিল্ড শেষ হওয়া পর্যন্ত অপেক্ষা করাতে, বিল্ডটিকে একটি ডিপেন্ডেন্সি হিসেবে সংজ্ঞায়িত করুন এবং যে টাস্কটি এর ওপর নির্ভরশীল সেটিতে "dependsOrder": "sequence" সেট করুন। VS Code ডিফল্টভাবে একাধিক ডিপেন্ডেন্সি সমান্তরালভাবে (parallel) চালায়, তাই বিল্ডটিকে প্রথমে তালিকাভুক্ত করাই যথেষ্ট নয়। নিচের উদাহরণটিতে npm test চালানোর আগে npm run build পুরোপুরি সম্পন্ন হওয়া পর্যন্ত চালানো হয়।
বিল্ড এবং ডিপেন্ডেন্ট টাস্ক সংজ্ঞায়িত করুন
আপনার প্রজেক্টে, ⇧⌘P চেপে Command Palette খুলুন, 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"
}
]
}
ডিপেন্ডেন্ট টাস্কটির নিজস্ব কোনো কমান্ড নেই: এর কাজ হলো প্রথমে ডিপেন্ডেন্সিটি চালানো। এর মাধ্যমে পরবর্তী কোনো কাজ করানোর জন্য, Test after build-এ একটি কমান্ড এবং শেল টাস্ক টাইপ যোগ করুন, যেমন "type": "shell" এবং "command": "npm test"। সেই প্যারেন্ট টাস্কটি Terminal > Run Task বা Command Palette-এর Tasks: Run Task কমান্ডের মাধ্যমে চালান। VS Code-এর ডকুমেন্টেশন অনুসারে, dependsOn টাস্কগুলোকে একত্রিত করে, ডিপেন্ডেন্সিগুলো ডিফল্টভাবে সমান্তরালভাবে চলে এবং dependsOrder: "sequence" সেগুলোকে তালিকাভুক্ত ক্রমানুসারে চালায়। Integrate with External Tools via Tasks
এই উদাহরণটিতে ধরে নেওয়া হয়েছে যে প্রজেক্টের package.json-এ কার্যকর build এবং test স্ক্রিপ্ট সংজ্ঞায়িত আছে এবং VS Code-এ npm উপলভ্য রয়েছে। কমান্ডগুলোকে আপনার প্রজেক্টের আসল বিল্ড এবং পরবর্তী কমান্ডগুলো দিয়ে প্রতিস্থাপন করুন। macOS-এ, VS Code শেল টাস্কগুলো একটি শেলের মাধ্যমে চলে; আপনি যদি একটি একক স্ট্রিং হিসেবে কমান্ড লেখেন, তবে এর শেলের প্রয়োজনীয় উদ্ধৃতি (quoting) বা এস্কেপিং (escaping) অন্তর্ভুক্ত করুন। বিশেষ করে, স্পেসযুক্ত পাথগুলোকে উদ্ধৃতি চিহ্নের মধ্যে রাখুন, যেমন "command": "./scripts/build.sh 'Assets Folder'"। Integrate with External Tools via Tasks
বিল্ডের ক্ষেত্রে "অপেক্ষা করা" বলতে কী বোঝায়
একটি সাধারণ ওয়ান-শট বিল্ডের ক্ষেত্রে, এই সিকোয়েন্সটি পরবর্তী ডিপেন্ডেন্সি বা প্যারেন্ট টাস্ক শুরু করার আগে আগের ডিপেন্ডেন্সিটিকে শেষ হতে দেয়। বিল্ড কমান্ডটি সম্পন্ন হওয়ার পর প্রস্থান (exit) করলেই এটি কাজ করে। আপনি যদি একাধিক ডিপেন্ডেন্সি তালিকাভুক্ত করেন, তবে সেগুলোকে dependsOn-এ যেভাবে উপস্থিত রয়েছে সেই ক্রমানুসারে সাজান; dependsOrder ছাড়া VS Code সেগুলোকে একসাথে শুরু করতে পারে।
একটি ওয়াচ (watch) টাস্ক ভিন্নভাবে আচরণ করে কারণ এটি চলতেই থাকার জন্য তৈরি করা হয়েছে। VS Code ডকুমেন্টেশনে উল্লেখ আছে যে একটি সিকোয়েন্সিয়াল ডিপেন্ডেন্সি চেইনে ব্যাকগ্রাউন্ড টাস্কগুলোর জন্য এমন একটি প্রবলেম ম্যাচ্যার (problem matcher) প্রয়োজন যা টাস্কগুলো কখন "সম্পন্ন" হয়েছে তা শনাক্ত করতে পারে। একটি ওয়াচারের জন্য, এর অর্থ হলো এমন একটি ম্যাচ্যার সংজ্ঞায়িত করা যা এর প্রস্তুত অবস্থা (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ব্যবহার করছে। - প্যারেন্ট টাস্কে
dependsOn-এর পাশাপাশিdependsOrderসেট করা আছে। - শেল কমান্ডটি ওয়ার্কস্পেস ফোল্ডার থেকে কাজ করছে, অথবা বিল্ড স্ক্রিপ্টটি কোনো সাবফোল্ডারে থাকলে
options.cwdসেট করা আছে। - বিল্ডটি যদি একটি ওয়াচার হয়, তবে এমন একটি ব্যাকগ্রাউন্ড প্রবলেম ম্যাচ্যার কনফিগার করুন যা প্রস্তুত হওয়ার সংকেত দেয়; কেবল
isBackgroundসেট করলেই VS Code বুঝতে পারে না যে এটি কখন প্রস্তুত।
VS Code প্ল্যাটফর্ম-নির্দিষ্ট টাস্ক কনফিগারেশন নথিভুক্ত করে, যার মধ্যে একটি osx বিভাগ অন্তর্ভুক্ত রয়েছে, তবে ডিপেন্ডেন্সি সাজানোর প্রক্রিয়া একই: dependsOn এবং dependsOrder। এই টাস্ক চেইনের জন্য আপনার কোনো মনগড়া "wait" শেল কমান্ডের প্রয়োজন নেই। ডকুমেন্টেশনে উল্লেখিত নিয়ম হলো, দীর্ঘ সময় ধরে চলা একটি ব্যাকগ্রাউন্ড টাস্কের প্রস্তুত হওয়ার বিষয়টি জানানোর জন্য একটি প্রবলেম ম্যাচ্যার প্রয়োজন। Appendix: Schema for tasks.json
উৎসসমূহ
- Integrate with External Tools via Tasks — Visual Studio Code
- Appendix — Visual Studio Code