Lewati ke konten

Wake

Wake adalah build runner alternatif eksperimental untuk wails3. Ia membaca Taskfile.yml yang sudah dimiliki proyek Anda — sintaks task, dep, var, template, include, dan platform-namespace yang sama — dan menjalankannya melalui executor yang mengenal Wails, bukan runtime Task serba guna.

Tujuannya bukan menggantikan Task. Ini adalah untuk menyediakan runner yang dibangun khusus untuk cara proyek Wails sebenarnya di-build, dengan semantik, output, dan default yang cocok dengan wails3 CLI lainnya. Jika Anda hanya menggunakan Wake, Taskfile Anda tidak berubah.

Baik Wake maupun runtime Task dikompilasi ke dalam wails3 — tidak ada yang memerlukan instalasi binary terpisah. Perbedaannya adalah Wake memahami domain. Runner serba guna mengeksekusi langkah-langkah apa pun yang tercantum dalam Taskfile, dalam urutan yang diberikan. Wake mengetahui apa sebenarnya build Wails itu — bundle frontend disematkan ke dalam binary, binary dikemas ke dalam artefak platform-spesifik, ikon dan binding dibuat secara bersamaan — dan menggunakan pengetahuan itu untuk mengoptimalkan build dengan cara yang tidak bisa dilakukan runner generik.

  • Hanya melakukan pekerjaan yang benar-benar dibutuhkan build. Wake melacak input dan output nyata dari setiap langkah sendiri. Untuk build Go, itu adalah grafik modul ditambah output dari langkah-langkah yang bergantung padanya, sehingga saat tidak ada yang relevan berubah, ia melewati compiler dan linker sepenuhnya alih-alih menjalankannya ulang. Runner serba guna hanya dapat melewati langkah saat Taskfile telah menentukan, di muka, file mana yang harus dipantau; Wake mengetahuinya dari apa yang sudah diketahuinya tentang build. Pada rebuild no-op hasilnya kira-kira ~20 ms (Wake) vs ~316 ms (Task). Build pertama membutuhkan waktu yang sama — didominasi oleh npm install, Vite, dan compiler Go.

  • Mengetahui apa yang bisa berjalan bersamaan. Karena Wake memahami langkah mana yang independen, ia menjalankannya secara paralel secara default dan baris verdict melaporkan speedup yang diperoleh. Nonaktifkan dengan WAKE_SERIAL=true saat output yang saling silang dari langkah sibling akan mengacaukan investigasi.

  • Output terstruktur dikontrol oleh wails3. Wake merender melalui reporter wails3 sendiri: satu baris per langkah yang direncanakan, status live, rincian fase berwarna di akhir, dan tautan file:line yang dapat diklik di dalam panel kegagalan. NO_COLOR dan lingkungan non-TTY (log CI) terdegradasi dengan bersih.

  • Bawaan, sehingga dapat berkembang bersama Wails. Karena Wake adalah bagian dari wails3 bukan alat pihak ketiga, kemampuan build baru dapat ditambahkan langsung — tidak perlu menunggu proyek terpisah untuk mengimplementasikannya. Hal itu juga membuka kemungkinan menjalankan skrip dan tooling lintas platform secara native di mana Taskfile saat ini melakukan shell out ke binary wails3 (menelurkan proses per panggilan). Melipat pekerjaan itu in-process memangkas overhead dan berarti lebih banyak speedup yang akan datang.

Wake sepenuhnya dibatasi oleh variabel lingkungan WAILS_USE_WAKE=true. Tanpa variabel tersebut (atau diatur ke selain true), setiap perintah wails3 menggunakan runtime Task yang disematkan persis seperti sebelumnya.

Terminal window
# Default: runtime Task, tanpa keterlibatan Wake
wails3 build
# Opt in: Wake menjalankan build / package / sign / task <name>
WAILS_USE_WAKE=true wails3 build
WAILS_USE_WAKE=true wails3 package
WAILS_USE_WAKE=true wails3 task <some-task-name>

Flag ini mencakup wails3 build, wails3 package, wails3 sign, dan wails3 task <name>. wails3 dev belum terpengaruh — dev watcher masih menggunakan pipeline-nya sendiri.

Wake mendukung Taskfile dasar ditambah override lokal. Letakkan file di samping Taskfile.yml Anda dan definisinya akan diutamakan:

FileTujuanPrioritas
Taskfile.ymldasar, di-committerendah
Taskfile.override.yml / .yamloverride tim yang di-commitmenengah
Taskfile.local.yml / .yamlpersonal, biasanya diabaikan gittertinggi

Semantik merge (lokal menang):

  • Task dengan nama yang sama menggantikan task dasar. Field daftar (cmds, deps, sources, generates, platforms, status, preconditions, aliases) menggantikan dasar saat override menyediakannya; field yang tidak disediakan override dipertahankan dari dasar.
  • env dan vars merge per kunci, dengan override menang saat terjadi tabrakan.
  • Task yang hanya ada di file override ditambahkan.

Misalnya, jika Taskfile.yml yang di-commit di-build dengan flag dev tetapi mesin Anda seharusnya selalu build produksi:

# Taskfile.local.yml (diabaikan git, milik Anda)
tasks:
build:
cmds:
- go build -tags production -o bin/app .
smoke:
cmds:
- ./bin/app --selftest

Sekarang build menjalankan perintah produksi Anda dan smoke tersedia, tanpa perubahan pada Taskfile yang di-commit.

Jika Wake menemukan fitur Taskfile yang tidak diimplementasikannya, ia menyerahkan seluruh proses ke runtime Task yang disematkan. Berikut yang saat ini memicu fallback tersebut:

  • dotenv di level taskfile
  • mode output selain interleaved
  • blok requires
  • interval (level taskfile atau task)
  • mode run selain always
  • short dalam task
  • defer dalam task
VariabelEfek
WAILS_USE_WAKEtrue mengaktifkan Wake untuk verb wails3 yang dapat dirutekan; selain itu menggunakan runtime Task
WAILS_NO_OVERRIDEStrue melewati penemuan Taskfile.local.* / .override.* (build deterministik)
WAKE_VERBOSEStream stdout/stderr subprocess secara live alih-alih menangkapnya untuk tampilan hanya saat gagal
WAKE_SILENTSembunyikan output task sepenuhnya
WAKE_SERIALtrue menonaktifkan fanout deps: paralel (paralel adalah default)
WAKE_FORCEtrue melewati setiap cache untuk rebuild bersih yang sesungguhnya
WAKE_DEBUGCatat internal resolver (DAG, deps, referensi var, perutean exec)
WAKE_NOTICEoff untuk menonaktifkan pemberitahuan “wake (experimental)” per-run

Cache build berada di .wake/cache.json (Task menggunakan .task/).

Wake adalah eksperimen, dan umpan balik Anda menentukan arahnya. Jika Anda mencobanya, kami ingin mendengar apakah lebih cepat, lebih jelas, dan apakah ada yang rusak — laporan yang paling berguna mengatakan apa yang Anda jalankan, apa yang Anda harapkan, dan apa yang sebenarnya terjadi. Ceritakan kepada kami di diskusi umpan balik Wake.