Хотя большинство зависимостей предоставляют только тот код, который может потребоваться, некоторые могут также собрать и предоставить двоичный файл в папке bin/ вашего проекта. Такое поведение можно включить для библиотеки, добавив в ее сегмент что-то похожее на shard.yml файл:
scripts:
postinstalclass="underline" shards build
executables:
- name_of_binary
Хук postinstall представляет собой команду, которая будет вызвана после установки осколка. Чаще всего это просто shards build, но мы также можем вызвать Makefile для более сложных сборок. Однако при использовании перехватчиков postinstall и особенно файлов Makefile необходимо помнить о совместимости. Например, если перехватчик запущен на машине без make или одного из требований сборки, вся команда shards build завершится неудачно.
Затем массив исполняемых файлов представляет, какие из собранных двоичных файлов следует скопировать в проект установки, имена которых соответствуют именам локально созданных двоичных файлов. Параметры --skip-postinstall и --skip-executables, которые можно передать при установке шардов, также существуют, если вы не хотите выполнять один или оба этих шага.
Далее давайте выясним, почему необходимо проявлять особую осторожность, когда проект зависит от кода C.
Shard зависимости от кода C
До сих пор предполагалось, что устанавливаемые Шарды представляют собой чистые реализации Crystal. Однако, как мы узнали ранее в Главе 7 «Взаимодействие C», Crystal может связываться с существующими библиотеками C и использовать их. Шарды не поддерживают установку библиотек C, необходимых для привязок Crystal. Пользователь, использующий Shard, может установить их, например, через менеджер пакетов своей системы.
Хотя Shards не обеспечивает их установку за вас, он поддерживает ключ информационных библиотек в shard.yml. Пример этого выглядит следующим образом:
libraries:
libQt5Gui:
libQt5Help: "~> 5.7" libQtBus: ">= 4.8"
Глядя на это, кто-то, пытающийся использовать Shard, может узнать, какие библиотеки необходимо установить, основываясь на библиотеках C, на которые ссылается Shard. Еще раз: это чисто информационный характер, но вам все равно рекомендуется включить его, если ваш шард привязан к каким-либо библиотекам C.
В большинстве проектов установленные зависимости, скорее всего, со временем устареют, в результате чего приложение потеряет потенциально важные исправления ошибок или новые функции. Давайте посмотрим, как обновить Shards дальше.
Обновление осколков
Программное обеспечение постоянно развивается и меняется. По этой причине библиотеки часто выпускают новые версии кода, включающие новые функции, улучшения и исправления ошибок. Хотя может возникнуть соблазн слепо обновить ваши зависимости до последних версий при каждом выпуске новой версии, необходимо соблюдать некоторую осторожность. Новые версии библиотеки могут быть несовместимы с предыдущими версиями, что может привести к поломке вашего приложения.
Всем шардам предлагается подписаться на https://semver.org. Следуя этому стандарту, мы позволяем оператору ~> работать, поскольку можно предположить, что в минорную версию или исправленную версию не будут внесены никакие критические изменения. Или, если да, то выйдет еще один патч, исправляющий регрессию.
Если вы не версионировали свои зависимости, а следующий выпуск зависимости является серьезным ударом, то вам придется либо вернуться к предыдущей версии, либо приступить к работе по обеспечению совместимости вашего приложения с новой версией зависимости. Именно по этой причине я снова настоятельно рекомендую правильно версионировать ваши зависимости, а также следить за обновлениями и читать журналы изменений для ваших зависимостей, чтобы вы знали, чего ожидать при их обновлении.
Предполагая, что вы это сделали и ваши зависимости имеют версии, вы можете обновить их, выполнив команду shards update. Это позволит разрешить и установить последние версии ваших зависимостей в соответствии с вашими требованиями. Он также обновит файл shard.lock новыми версиями.
Проверка зависимостей
В некоторых случаях вы можете просто захотеть убедиться, что все необходимые зависимости установлены, не устанавливая ничего нового. В этом случае можно использовать команду проверки осколков. Он установит ненулевой код выхода, если все зависимости не установлены, а также выведет на терминал некоторую текстовую информацию. Аналогично, команду shards outdated можно использовать для проверки актуальности ваших зависимостей в соответствии с вашими требованиями.