Пакет добавляет обычным модулям Топаза общий корень, точку входа, граф зависимостей и цель сборки. Он не добавляет синтаксис и не ослабляет правила видимости и циклов модулей.
1. Создание корня пакета
topaz init --root my-app
В корне появляются topaz.toml и src/main.tpz. Манифест задаёт имя пакета,
текущий язык, точку входа, стандартную цель сборки и зависимости. Команды с
--root my-app без входного файла используют точку входа из манифеста.
Каркасы Web Application и HTTP выбираются при создании:
topaz init --target web-app --root my-web-app
topaz init --target http-service --root my-service
2. Блокировка пакета без зависимостей реестра
topaz lock --root my-app
topaz fmt --check --root my-app
topaz check --root my-app --locked
topaz test --root my-app --locked
topaz run --root my-app --locked
topaz.lock фиксирует корневой манифест и разрешённое содержимое локальных
зависимостей. --locked отказывается продолжать, если манифест, файл
блокировки или локальные байты отличаются. Намеренно измените манифест, снова
выполните lock, проверьте разницу и верните --locked.
3. Добавление локальной зависимости или зависимости реестра
Зависимость по пути добавляется с относительным путём и идентичностью содержимого:
topaz add utility --path ../utility --root my-app
topaz lock --root my-app
До блокировки зависимость реестра должна находиться в явно указанном локальном источнике:
topaz add utility@1.2.0 --root my-app
topaz vendor --root my-app --from ./registry
topaz check --root my-app --locked
vendor проверяет выбранный пакет, копирует его в
vendor/utility/1.2.0 и записывает файл блокировки. Если выполнить lock до
появления хэша или скопированного содержимого, команда завершается ошибкой, не
обращаясь к сетевому реестру. fetch использует тот же явно указанный
локальный источник через --from; ни одна из команд не разрешает зависимости
через окружающую сеть.
4. Сборка из локальных источников
topaz build --root my-app --locked --release --out-dir product
Разрешение пакета теперь использует только корень, зависимости по пути, зафиксированные байты скопированных зависимостей и встроенные данные инструментария. Платформенная и браузерная сборка также внутренне запускает Cargo в заблокированном автономном режиме. Дополнительный параметр Топаза для этого не требуется.
Готовый управляемый продукт является единицей распространения. Во время
выполнения ему не нужны topaz.toml, topaz.lock, vendor, исходники пакета
и CLI Топаза. Копируйте весь каталог продукта и данные приложения, необходимые
объявленным файловым полномочиям.
Восстановление без ослабления файла блокировки
- Если
--lockedсообщает об изменении манифеста, решите, намеренно ли оно, пересоздайте файл блокировки и проверьте разницу. - Если отсутствует пакет реестра, получите явно указанный локальный источник и
выполните
vendorилиfetch; не удаляйте--locked. - Если скопированное содержимое изменилось, восстановите записанные байты либо
намеренно повторите команду
vendorи проверьте новую зависимость. - Если изменился вывод сборки, используйте новый пустой каталог вместо удаления неизвестных файлов.