Kompilator mendukung konfigurasi cara mengawasi berkas dan direktori menggunakan kompilator flags di TypeScript 3.8+, dan variabel environment.
Latar Belakang
Implementasi --watch
dari compiter bergantung pada penggunaan fs.watch
dan fs.watchFile
yang disediakan oleh node, kedua metode ini memiliki kelebihan dan kekurangan.
fs.watch
menggunakan berkas system event untuk memberi tahu perubahan dalam berkas/direktori. Tetapi ini bergantung pada OS dan notifikasi tidak sepenuhnya dapat diandalkan dan tidak berfungsi seperti yang diharapkan pada banyak OS. Juga mungkin ada batasan jumlah watch yang dapat dibuat, misalnya linux dan kami dapat melakukannya dengan cukup cepat dengan program yang menyertakan banyak berkas. Tetapi karena ini menggunakan berkas system event, tidak banyak siklus CPU yang terlibat. Kompilator biasanya menggunakan fs.watch
untuk melihat direktori (misalnya. Direktori sumber disertakan oleh berkas konfigurasi, direktori di mana resolusi modul gagal, dll.) Ini dapat menangani ketepatan yang hilang dalam memberi tahu tentang perubahan. Tetapi memantau secara rekursif hanya didukung pada Windows dan OSX. Artinya kita membutuhkan sesuatu untuk menggantikan sifat rekursif di OS lain.
fs.watchFile
menggunakan polling dan karenanya melibatkan siklus CPU. Tetapi ini adalah mekanisme yang paling andal untuk mendapatkan pembaruan status berkas/direktori. Kompilator biasanya menggunakan fs.watchFile
untuk melihat berkas sumber, berkas konfigurasi dan berkas yang hilang (referensi berkas hilang) yang berarti penggunaan CPU bergantung pada jumlah berkas dalam program.
Konfigurasi berkas watching menggunakan tsconfig.json
{// Beberapa opsi kompilator umumnya" ": {" ": "es2020"," ": "node"// ...},// BARU: Opsi untuk memantau berkas/direktori"watchOptions": {// Gunakan native berkas system events untuk berkas dan direktori" ": "useFsEvents"," ": "useFsEvents",// Dapatkan pembaruan berkas// ketika terdapat update yang besar." ": "dynamicPriority"}}
Anda dapat membacanya lebih lanjut di catatan rilis.
Konfigurasi berkas watching menggunakan variabel environment TSC_WATCHFILE
Opsi | Deskripsi |
---|---|
PriorityPollingInterval |
Gunakan fs.watchFile tetapi gunakan interval polling yang berbeda untuk berkas sumber, berkas konfigurasi, dan berkas yang hilang |
DynamicPriorityPolling |
Gunakan antrian dinamis di mana dalam berkas yang sering dimodifikasi akan memiliki interval yang lebih pendek dan berkas yang tidak diubah akan lebih jarang diperiksa |
UseFsEvents |
Gunakan fs.watch untuk memanfaatkan system event berkas (tetapi mungkin tidak akurat pada OS yang berbeda) untuk mendapatkan pemberitahuan terhadap perubahan/pembuatan/penghapusan berkas. Perhatikan bahwa beberapa OS misalnya. linux memiliki batasan jumlah pengamatan dan jika gagal melakukan pengamatan menggunakan fs.watch , maka pengamatan akan dilakukan dengan fs.watchFile |
UseFsEventsWithFallbackDynamicPolling |
Opsi ini mirip dengan UseFsEvents kecuali jika gagal memantau menggunakan fs.watch , pengawasan dilakukan melalui antrean polling dinamis (seperti dijelaskan dalam DynamicPriorityPolling ) |
UseFsEventsOnParentDirectory |
Opsi ini mengawasi direktori induk dari berkas dengan fs.watch (menggunakan berkas system event) sehingga menjadi rendah pada CPU tetapi dengan keakuratan yang rendah. |
standar (tanpa menspesifikkan nilainya) | Jika variabel environment TSC_NONPOLLING_WATCHER di-set ke true, maka akan mengawasi direktori induk dari berkas (seperti UseFsEventsOnParentDirectory ). Jika tidak, akan menggunakan fs.watchFile dengan 250ms sebagai waktu tunggu untuk berkas apa pun. |
Mengonfigurasi pengawasan direktori menggunakan variabel environment TSC_WATCHDIRECTORY
Pemantauan direktori pada platform yang tidak mendukung pemantau direktori rekursif secara native di node, maka akan menggunakan opsi yang berbeda, yang dipilih olehTSC_WATCHDIRECTORY
. Perlu dicatat bahwa, platform yang mendukung pemantauan direktori secara rekursif (misalnya Windows), nilai dari variabel environment tersebut akan diabaikan.
Opsi | Deskripsi |
---|---|
RecursiveDirectoryUsingFsWatchFile |
Gunakan fs.watchFile untuk mengawasi direktori dan direktori anak yang merupakan polling watch (menggunakan siklus CPU) |
RecursiveDirectoryUsingDynamicPriorityPolling |
Gunakan antrian polling dinamis untuk mengumpulkan perubahan pada direktori dan sub direktori. |
default (tidak ada nilai yang ditentukan) | Gunakan fs.watch untuk memantau direktoru dan sub direktorinya |