Внести изменения

Редактировать эту документацию

Переведите документацию или откройте весь проект на своём компьютере.

Ничего не будет опубликовано, пока вы не решите отправить свою работу.

Wake

Экспериментальный инструмент запуска сборки, учитывающий особенности Wails: он выполняет существующие Taskfile вашего проекта, ускоряет инкрементальные сборки, предоставляет структурированный вывод и по умолчанию запускает задачи параллельно.

Wake — экспериментальное альтернативное средство запуска сборки для wails3. Оно читает те же Taskfile.yml, которые уже есть в вашем проекте, — с тем же синтаксисом задач, зависимостей, переменных, шаблонов, включений и пространств имён платформ — и выполняет их с помощью исполнителя, учитывающего особенности Wails, а не универсальной среды выполнения Task.

Цель состоит не в том, чтобы заменить Task, а в том, чтобы предоставить средство запуска, специально созданное для фактического процесса сборки проектов Wails, с семантикой, выводом и настройками по умолчанию, согласованными с остальной частью CLI wails3. Если вы используете только Wake, ваши Taskfile не изменятся.

Зачем нужен Wake

И Wake, и среда выполнения Task встроены в wails3 — ни для одного из них не требуется устанавливать отдельный исполняемый файл. Разница в том, что Wake понимает предметную область. Универсальное средство запуска выполняет перечисленные в Taskfile шаги в указанном порядке. Wake знает, что в действительности представляет собой сборка Wails: пакет фронтенда встраивается в исполняемый файл, этот файл упаковывается в артефакты для конкретных платформ, а параллельно создаются значки и привязки. Благодаря этому Wake оптимизирует сборку способами, недоступными универсальному средству запуска.

  • Он выполняет только действительно необходимую для сборки работу. Wake самостоятельно отслеживает фактические входные и выходные данные каждого шага. Для сборки Go это граф модулей и результаты шагов, от которых она зависит. Поэтому, если ничего значимого не изменилось, Wake полностью пропускает компилятор и компоновщик, а не запускает их повторно. Универсальное средство запуска может пропустить шаг, только если в Taskfile заранее и точно перечислены отслеживаемые файлы; Wake определяет их на основе уже имеющихся у него сведений о сборке. Повторная сборка без изменений занимает примерно ~20 мс (Wake) против ~316 мс (Task). Полная сборка с нуля занимает одинаковое реальное время: основная его часть приходится на npm install, Vite и компилятор Go.

  • Он знает, какие шаги можно выполнять одновременно. Поскольку Wake понимает, какие шаги независимы друг от друга, по умолчанию он выполняет их параллельно, а итоговая строка показывает достигнутое ускорение. Отключите параллельное выполнение с помощью WAKE_SERIAL=true, если чередующийся вывод соседних шагов затрудняет анализ проблемы.

  • Структурированный вывод под управлением wails3. Wake формирует вывод через собственный модуль отчётов wails3: по одной строке на каждый запланированный шаг, состояние в реальном времени, цветная разбивка по этапам в конце и активные ссылки file:line в панелях ошибок. В режиме NO_COLOR и средах без TTY (например, в журналах CI) представление корректно упрощается.

  • Встроен и может развиваться вместе с Wails. Поскольку Wake является частью wails3, а не сторонним инструментом, новые возможности сборки можно добавлять непосредственно — не нужно ждать, пока их реализует отдельный проект. Это также позволит выполнять кроссплатформенные сценарии и инструменты нативно там, где сегодня Taskfile обращается к исполняемому файлу wails3 через оболочку, создавая отдельный процесс для каждого вызова. Выполнение этой работы внутри процесса снижает накладные расходы и открывает возможности для дальнейшего ускорения.

Включение Wake

Wake полностью управляется переменной окружения WAILS_USE_WAKE=true. Если она не задана или имеет значение, отличное от true, каждая команда wails3 использует встроенную среду выполнения Task точно так же, как и раньше.

bash
# Default: Task runtime, no Wake involvement
wails3 build

# Opt in: Wake drives 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>

Этот флаг применяется к wails3 build, wails3 package, wails3 sign и wails3 task <name>. На wails3 dev он пока не влияет: средство отслеживания изменений в режиме разработки по-прежнему использует собственный конвейер.

Многоуровневые локальные переопределения

Wake поддерживает базовый Taskfile и локальные переопределения. Поместите файл рядом с Taskfile.yml, и его определения получат приоритет:

Файл Назначение Приоритет
Taskfile.yml базовый, хранится в репозитории самый низкий
Taskfile.override.yml / .yaml общие для команды переопределения, хранятся в репозитории средний
Taskfile.local.yml / .yaml личные, обычно игнорируются Git самый высокий

Правила слияния (локальные значения имеют приоритет):

  • Задача с тем же именем переопределяет базовую задачу. Если в переопределении заданы поля-списки (cmds, deps, sources, generates, platforms, status, preconditions, aliases), они заменяют соответствующие базовые поля; поля, отсутствующие в переопределении, сохраняются из базовой задачи.
  • env и vars объединяются по ключам, причём при совпадении ключей приоритет имеет переопределение.
  • Задача, присутствующая только в файле переопределения, добавляется.

Например, если хранящийся в репозитории Taskfile.yml выполняет сборку с флагами разработки, но на вашем компьютере всегда должна выполняться производственная сборка:

yaml
# Taskfile.local.yml (git-ignored, yours)
tasks:
  build:
    cmds:
      - go build -tags production -o bin/app .
  smoke:
    cmds:
      - ./bin/app --selftest

Теперь build выполняет вашу команду производственной сборки, а smoke становится доступна — при этом хранящийся в репозитории Taskfile не изменяется.

Автоматический переход на резервный механизм

Если Wake встречает функцию Taskfile, которую не поддерживает, он передаёт весь запуск встроенной среде выполнения Task. Сейчас такой переход вызывают следующие функции:

  • dotenv на уровне Taskfile
  • режимы output, отличные от interleaved
  • блок requires
  • interval (на уровне Taskfile или задачи)
  • режимы run, отличные от always
  • short в задаче
  • defer в задаче

Переменные окружения

Переменная Действие
WAILS_USE_WAKE true включает Wake для поддерживающих маршрутизацию команд wails3; при любом другом значении используется среда выполнения Task
WAILS_NO_OVERRIDES true отключает обнаружение Taskfile.local.* / .override.* (для детерминированных сборок)
WAKE_VERBOSE Выводить stdout/stderr подпроцесса в реальном времени, а не сохранять их для отображения только при сбое
WAKE_SILENT Полностью подавлять вывод задачи
WAKE_SERIAL true отключает параллельный веерный запуск deps: (по умолчанию используется параллельный запуск)
WAKE_FORCE true обходит все кеши для действительно чистой повторной сборки
WAKE_DEBUG Записывать в журнал внутренние данные механизма разрешения (DAG, зависимости, ссылки на переменные, маршрутизацию выполнения)
WAKE_NOTICE off, чтобы отключить уведомление «wake (experimental)» при каждом запуске

Кеш сборки находится в .wake/cache.json (Task использует .task/).

Обратная связь

Wake — эксперимент, и от ваших отзывов зависит его дальнейшее развитие. Если вы попробуете Wake, расскажите нам, стал ли он быстрее и понятнее и возникли ли какие-либо неполадки. Самые полезные отчёты содержат сведения о том, что вы запускали, какого результата ожидали и что произошло на самом деле. Оставьте отзыв в обсуждении Wake.

Редактировать страницу

Последнее обновление: