Untuk membuat task VS Code menunggu proses build selesai sebelum menjalankan perintah lain di macOS, tentukan build sebagai dependensi dan atur "dependsOrder": "sequence" pada task yang bergantung padanya. Secara default, VS Code menjalankan beberapa dependensi secara paralel, jadi mencantumkan build terlebih dahulu saja tidak cukup. Contoh di bawah ini menjalankan npm run build hingga selesai sebelum npm test.

Menentukan build dan task dependen

Di proyek Anda, buka Command Palette dengan ⇧⌘P, jalankan Tasks: Configure Task, atau gunakan Terminal > Configure Tasks. Buat atau edit .vscode/tasks.json di ruang kerja. Pertahankan task yang sudah ada jika masih Anda butuhkan, dan tambahkan task seperti ini di dalam array 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"
    }
  ]
}

Task dependen tidak memiliki perintahnya sendiri: tugasnya adalah menjalankan dependensi terlebih dahulu. Untuk membuatnya melakukan tindakan lanjutan, tambahkan perintah dan tipe task shell, misalnya "type": "shell" dan "command": "npm test", ke Test after build. Jalankan task induk tersebut melalui Terminal > Run Task atau perintah Tasks: Run Task di Command Palette. Dokumentasi VS Code menyatakan bahwa dependsOn menyusun task, dependensi berjalan secara paralel secara default, dan dependsOrder: "sequence" menjalankannya sesuai urutan yang tercantum. Integrate with External Tools via Tasks

Contoh ini mengasumsikan bahwa package.json proyek mendefinisikan skrip build dan test yang berfungsi dan npm dapat diakses oleh VS Code. Ganti perintah dengan perintah build dan tindak lanjut yang sebenarnya untuk proyek Anda. Di macOS, task shell VS Code berjalan melalui shell; jika Anda menulis perintah sebagai satu string, sertakan tanda kutip atau karakter escape yang dibutuhkan oleh shell tersebut. Khususnya, gunakan tanda kutip pada jalur yang mengandung spasi, seperti "command": "./scripts/build.sh 'Assets Folder'". Integrate with External Tools via Tasks

Apa arti “menunggu” untuk proses build

Untuk build satu kali (one-shot) biasa, urutan tersebut membuat dependensi selesai terlebih dahulu sebelum memulai dependensi berikutnya atau task induk. Ini berfungsi ketika perintah build keluar (exit) setelah selesai. Jika Anda mencantumkan beberapa dependensi, urutkan sesuai urutan kemunculannya di dependsOn; tanpa dependsOrder, VS Code dapat memulainya secara bersamaan.

Task pengawas (watch task) berperilaku berbeda karena dimaksudkan untuk terus berjalan. VS Code mendokumentasikan bahwa background task dalam rantai dependensi berurutan membutuhkan problem matcher yang mendeteksi kapan task tersebut “selesai”. Untuk watcher, itu berarti mendefinisikan matcher yang mengenali status siapnya; jika tidak, VS Code tidak dapat menentukan kapan ia siap untuk beralih. Build satu kali biasanya tidak boleh menggunakan mode watch atau isBackground. Integrate with External Tools via Tasks

Jalankan dan diagnosis masalah umum

Simpan tasks.json, lalu jalankan Test after build dari Terminal > Run Task. Baca output terminal terintegrasi untuk mengonfirmasi bahwa perintah sebenarnya telah berjalan dan selesai. Jika task induk tidak ada atau build tidak dimulai lebih dulu, periksa poin-poin berikut:

  • Label di dependsOn sama persis dengan label task build—termasuk spasi dan huruf besar/kecil.
  • Kedua definisi task berada di dalam array tasks yang sama, dan file tersebut menggunakan task versi 2.0.0.
  • dependsOrder diatur pada task induk, berdampingan dengan dependsOn.
  • Perintah shell berfungsi dari folder ruang kerja, atau atur options.cwd jika skrip build berada di dalam subfolder.
  • Jika build adalah watcher, konfigurasikan background problem matcher yang memberi sinyal kesiapan; hanya menyetel isBackground tidak memberi tahu VS Code kapan task tersebut siap.

VS Code mendokumentasikan konfigurasi task khusus platform, termasuk bagian osx, tetapi mekanisme pengurutan dependensi tetap sama: dependsOn dan dependsOrder. Anda tidak memerlukan perintah shell “wait” buatan sendiri untuk rantai task ini. Batasan yang didokumentasikan adalah bahwa background task yang berjalan lama memerlukan problem matcher untuk melaporkan kesiapannya. Appendix: Schema for tasks.json

Sumber