emit выводит сгенерированный исходный код для инспекции или интеграции. build формирует готовый продукт поставки. Развёртывайте каталог build, а не временную директорию компилятора и не отдельные сгенерированные файлы вне контекста.
Сборка продуктов
topaz build main.tpz --release --out-dir native-product
topaz build --target python --root my-app --locked --out-dir python-product
topaz build main.tpz --target web --out-dir web-product
topaz build main.tpz --target web-worker --out-dir worker-product
topaz build --root my-app --locked --release --out-dir package-productПоследняя команда использует параметр [build].target из topaz.toml. Цели web-app и http-service доступны только в пакетном режиме. Файл topaz.lock применяется при разработке и проверке. Готовый управляемый продукт записывает сведения об идентификации в topaz-artifact.json.
Общие файлы каждого продукта
Каждая успешная сборка добавляет:
LICENSE
NOTICE
GENERATED-OUTPUT-NOTICE.txt
topaz-artifact.jsonМанифест артефакта содержит целевую платформу, идентификацию инструментария и языка, требования к среде выполнения, способ запуска, а также путь, размер, хэш-сумму и признак исполняемости для каждого управляемого файла. Этот файл записывается последним.
Деревья отдельных целей
Платформенный продукт добавляет один исполняемый файл:
target/debug/program[.exe]
target/release/program[.exe]Существует только выбранный профиль. В Windows имя файла завершается расширением .exe.
Python добавляет:
program.py
topaz_py_rt.pyRaw Web добавляет:
topaz-web.js
topaz-web.d.ts
topaz-web.wasmWeb Worker добавляет к файлам Raw Web:
topaz-web-worker.js
topaz-web-worker-client.jsУправляемое Web Application добавляет к файлам Raw Web:
index.html
topaz-app.js
topaz-web-capabilities.json
styles/app.cssОбъявленные стили и ресурсы сохраняют нормализованные относительные пути, поэтому содержание последней строки зависит от пакета.
HTTP-сервис добавляет:
target/release/program[.exe]
topaz-service-config.json
THIRD-PARTY-NOTICES.txtВ примере приведена релизная сборка. В отладочной сборке используется каталог target/debug, а в Windows добавляется расширение [.exe].
Запуск без исходного пакета Топаза
Скопируйте весь каталог продукта в новое место и запускайте из его корневой директории:
./target/release/program
python3 program.pyИспользуйте команду, соответствующую выбранному платформенному, HTTP- или Python-продукту. Для Python требуется версия 3.11 или новее. Платформенный исполняемый файл и файл HTTP-сервиса предназначены для системы сборки.
Разворачивайте каталог управляемого Web Application через HTTP и открывайте index.html. Raw Web и Worker требуют среду модулей ES, импортирующую сгенерированный API JavaScript. Ни один браузерный продукт не должен полагаться на загрузку модулей по протоколу file://.
Платформенные и Python-приложения из пакета сопоставляют объявленные корневые пути доступа к файлам относительно рабочего каталога процесса. Если этого требует манифест, скопируйте данные приложения и создайте доступные для записи каталоги рядом с управляемым продуктом. Данные пакета не добавляются автоматически. Стили и ресурсы веб-приложения обрабатываются иначе: объявленные входные точки [web] копируются в управляемый браузерный продукт.
Безопасность каталога вывода и восстановление
Повторная сборка той же цели сначала проверяет существующие управляемые байты. Топаз отклоняет смену цели, некорректный манифест, изменённый управляемый файл, символические ссылки и конфликты с пользовательскими путями. Файлы, не указанные в манифесте артефакта, сохраняются.
Не удаляйте каталог с неопределённым состоянием для принудительного запуска сборки. Сохраните его для анализа и выберите новый пустой каталог --out-dir. Если требуется восстановить прежний продукт, восстановите целиком заведомо исправную копию, а не редактируйте хэш-суммы и не удаляйте отдельные управляемые файлы.