Создайте пакет, добавьте зависимости из локальных папок и зафиксируйте их содержимое в topaz.lock. Если команда с проверкой блокировки завершается ошибкой, таблица восстановления поможет найти нужный файл.
Установите topaz по руководству Первая программа. Выполняйте команды ниже из рабочей папки, где ещё нет my-app, utility и registry-app.
Создайте и запустите пакет
topaz init --root my-app
topaz lock --root my-app
topaz fmt --check --root my-app
topaz check --root my-app --locked
topaz run --root my-app --lockedinit создаёт my-app/topaz.toml и my-app/src/main.tpz. Команда lock создаёт my-app/topaz.lock. Проверки завершаются с кодом 0, а run печатает Hello from Topaz.
Файл topaz.toml называется манифестом и содержит настройки пакета. В нём записаны имя, версии пакета и языка, входной файл, стандартная цель сборки и зависимости. Если аргумент файла не указан, команды используют точку входа из манифеста.
topaz.lock фиксирует манифест и содержимое зависимостей. Флаг --locked останавливает команду, если входные данные перестали совпадать с записью. При различиях форматирования выполните topaz fmt --root my-app и повторите проверку формата. Для пакета с тестами укажите пути тестовых файлов, как в Первом приложении.
Добавьте локальную зависимость
Создайте второй пакет рядом с my-app и добавьте его как зависимость.
topaz init --root utility
topaz add utility --path ../utility --root my-app
topaz lock --root my-app
topaz check --root my-app --lockedadd записывает в my-app/topaz.toml зависимость utility с путём и хэшем содержимого. Хэш идентифицирует содержимое файлов зависимости. Путь ../utility отсчитывается от my-app и указывает на соседнюю папку. Команда lock обновляет topaz.lock, а последняя проверка завершается с кодом 0.
Скопируйте зависимость из локального реестра
Для этого примера используйте отдельный пакет registry-app. Сначала скопируйте папку utility из предыдущего раздела в registry/utility/1.2.0 внутри рабочей папки. В файле topaz.toml этой копии сохраните [package].name = "utility" и задайте [package].version = "1.2.0". Оставьте исходные файлы и остальные созданные настройки.
topaz init --root registry-app
topaz add utility@1.2.0 --root registry-app
topaz vendor --root registry-app --from ./registry
topaz check --root registry-app --lockedКоманда vendor проверяет пакет, копирует его в registry-app/vendor/utility/1.2.0 и записывает registry-app/topaz.lock. Последняя проверка завершается с кодом 0. Такое копирование зависимостей внутрь проекта называется вендорингом.
Путь --from отсчитывается от рабочей папки. Команда fetch принимает тот же локальный источник и также записывает копии зависимостей и файл блокировки. Обе команды работают без загрузки из сетевого реестра. Команда lock завершится ошибкой, если у зависимости реестра ещё нет записанного хэша или скопированного содержимого.
Исправьте несовпадение файла блокировки
| Проблема | Где исправить |
|---|---|
| Манифест изменился | Просмотрите my-app/topaz.toml. Отмените случайное изменение. Для намеренного изменения выполните topaz lock --root my-app и проверьте разницу в topaz.lock. |
| Содержимое локальной зависимости изменилось | Восстановите записанные файлы в utility. Чтобы принять намеренное обновление, удалите её запись из my-app/topaz.toml, повторите add для записи нового хэша, затем выполните lock. Проверьте обе разницы. |
| Пакет реестра отсутствует | Проверьте registry/utility/1.2.0/topaz.toml, имя и версию пакета, а также исходники. Повторите vendor --from ./registry. |
| Скопированная зависимость изменилась | Восстановите записанные файлы или заново выполните вендоринг проверенной зависимости. Если манифест фиксирует хэш, обновите его по проверенному содержимому. |
После исправления снова выполните check с --locked. Пакет по-прежнему следует правилам видимости и циклов модулей.
Соберите пакет для распространения
topaz build --root my-app --locked --release --out-dir productКоманда создаёт product/ с исполняемым файлом и topaz-artifact.json. Поиск пакетов использует корень, зависимости по пути, зафиксированные копии зависимостей и встроенные данные инструментария. Нативная и Web-сборка требуют инструментарий Rust для выбранной цели и запускают Cargo в заблокированном автономном режиме.
Распространяйте весь каталог продукта и данные приложения, необходимые при его файловых разрешениях. При запуске не нужны исходники пакета, topaz.toml, topaz.lock, vendor и CLI Топаза. Условия запуска описаны в разделе Артефакты и развёртывание. Если созданный результат изменился, сохраните его и выберите новый пустой каталог вывода.